2016-01-22 5 views
1

Я пытаюсь создать изображение диаграммы, используя вызов AJAX для Webservice. Я могу построить диаграмму и преобразовать ее в изображение, но по какой-то причине я не могу вернуть изображение к моему вызову AJAX.ajax image from asp.net webservice

Метод веб-службы asp.net, который выглядит так.

[WebMethod(EnableSession = true)] 
    public void getCandles(string Symbol) 
    {    
     Chart chrt = new Chart(); 

     stockQuotes.bldChart(ref chrt); //// returns chart of candlesticks 

     bytes[] chartBytes; 

     using (var chartimage = new MemoryStream()) //// change chart to bytes 
      { 
       try 
       { 
        chrt.SaveImage(chartimage, ChartImageFormat.Png); 
        chartBytes = chartimage.GetBuffer(); 
       }catch 
       { 
        return (null); 
       } 
      } 

     /// Transform to memory stream and finally to image 
     MemoryStream ms = new MemoryStream(chartImage); 
     Image img = Image.FromStream(ms) 


     /// Build respoonse       
     Context.Response.Clear(); 
     Context.Response.ContentType = "image/png"; 
     index._Stocks[Symbol].ChartImage.Save(Context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);    

    } 

Этот метод вызывается с помощью вызова AJAX, который выглядит следующим образом:

function UpdatePriceChart() 
    { 
     var selectedSymbol = $("#ddlSymbols").val(); 



     $.ajax({ 
      url: "/WS/wsCandles.asmx/getCandles", 
      data: { "Symbol": $("#ddlSymbols").val() }, 
      method: "post", 
      success: function (data) { 
       $('#chrtPrice').attr('src', data); 
      }, 
      error: function (err) { 
       alert(err); 
      } 

     }) 
    } 

По какой-то причине, изображение возвращается всегда пуст. Может ли кто-нибудь направить меня в правильном направлении. Спасибо за помощь.

+0

установить dataType как 'image/png' в jQuery ajax call. А также сделайте его типом запроса GEt, а не POST. – Sunil

+0

Данные, которые вы отправляете, являются бинарным форматом полного изображения, вы поместите его на src img, который запрашивает имя файла, или вставляя изображение base64 – Aristos

ответ

0

В случае, как это, я обычно хожу с обработчиком, который возвращает изображение обратно прямой в ГКЗ img, например, страница часть будет что-то вроде:

function UpdatePriceChart() 
    { 
     var selectedSymbol = $("#ddlSymbols").val(); 

     $('#chrtPrice').attr('src', '/WS/wsCandles.ashx?symbol=' + selectedSymbol); 
    } 

и обработчик будет что-то вроде:

public void ProcessRequest (HttpContext Context) 
{ 
     Chart chrt = new Chart(); 
     stockQuotes.bldChart(ref chrt); //// returns chart of candlesticks 

     bytes[] chartBytes; 

     using (var chartimage = new MemoryStream()) //// change chart to bytes 
      { 
       try 
       { 
        chrt.SaveImage(chartimage, ChartImageFormat.Png); 
        chartBytes = chartimage.GetBuffer(); 
       }catch 
       { 
        return (null); 
       } 
      } 

     /// Transform to memory stream and finally to image 
     MemoryStream ms = new MemoryStream(chartImage); 
     Image img = Image.FromStream(ms) 


     /// Build respoonse       
     Context.Response.ContentType = "image/png"; 
     index._Stocks[Symbol].ChartImage.Save(Context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);    
} 

Вам нужно добавить дополнительный код, чтобы прочитать символ, и, возможно, некоторые дополнительные изменения, чтобы работать, как ожидают, но это идея.