jQuery ajax вызов веб-сервиса для извлечения ошибок растрового изображения с кодом 200

#javascript #jquery #ajax #wcf #web-services

#javascript #jquery #ajax #wcf #веб-сервисы

Вопрос:

ОТРЕДАКТИРОВАННЫЙ код обновлен

когда я удалил тип данных, это вызвало успех. однако изображение не отображается (вместо этого отображается заполнитель X для тега изображения). Возможно ли вообще отобразить байты изображения в теге html-изображения?

оригинал

С помощью следующего фрагмента (конфигурация, похоже, в порядке) я пытаюсь поэкспериментировать, чтобы посмотреть, смогу ли я получить растровые данные с сервера и загрузить их в DOM. Проблема в том, что вызов ajax выдает ошибку, но код состояния равен 200 «OK» … кто-нибудь знает почему?

Default.aspx (тестовая страница)

 <div></div>
...
<script type="text/javascript">
    /// <reference path="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5-vsdoc.js"/>
    $(function () {
        $.ajax({
            type: "GET",
            url: "Service.svc/GetBitmap",
            context: $("<div>"),
            success: function (r) {
                $(this).append(
                   $("<img src='data:image/bmp;base64,"   r.text  "'></img>"));
            },
        });
    });
</script>
  

Service.cs (тестовый сервис)

 public class Service : IService
{
    public byte[] GetBitmap()
    {
        MemoryStream ms = new MemoryStream();
        Bitmap b = new Bitmap(HostingEnvironment.MapPath(@"~/Bitmap/test.bmp"));
        b.Save(ms, ImageFormat.Bmp);
        return new BinaryReader(ms).ReadBytes((int)ms.Length);
    }
}
  

Комментарии:

1. вы пробовали без base64, части?

2. @Einacio: да, у меня есть. растровое изображение также допустимо, когда я использую <img src=»Bitmap/test.bmp» /> оно отображается правильно

3. и обратная кодировка base64 для возврата сервиса?

4. @Einacio: Я предполагал, что WCF делает это для меня, возможно, ошибочно. Должен ли я делать что-то особенное на стороне сервиса?

5. я не знаю WCF, поэтому я просто опубликовал в качестве предложения. Вам лучше исследовать и доказать, что я ошибаюсь. попробуйте поместить ответ ajax в a <pre> , и вы увидите, закодирован ли он в base64

Ответ №1:

Во-первых, правильный тип MIME — это image/bmp , не img/bmp .

Тем не менее, насколько я знаю $.ajax , поддерживаются только текстовые типы данных. Смотрите здесь: http://api.jquery.com/jQuery.ajax /

Я бы посоветовал вам написать сервис, который возвращает изображение по хорошо известному URL.

Комментарии:

1. Я обновил вопрос до того, каким он должен был быть изначально. Если я не могу понять это, я приму это как решение, потому что это помогло мне зайти так далеко.