2016-01-22 59 views
1

我想建立一個圖表使用AJAX調用Web服務。我能夠構建圖表並將其轉換爲圖像,但出於某種原因,我無法將圖像恢復到我的AJAX調用。從asp.net ajax圖像webservice

看起來像這樣的asp.net web服務方法。

[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

在jQuery ajax調用中將dataType設置爲'image/png'。並且使其成爲GEt請求類型而不是POST。 – Sunil

+0

您發送的數據是完整的圖像二進制格式,您將其放在要求輸入文件名的img的src中,或者嵌入base64圖像 – Aristos

回答

0

如果那樣,我通常與返回圖像回直接到img的src,例如處理程序走,頁面部分將是這樣的:

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);    
} 

您需要添加一些額外的代碼讀取符號,也許一些額外的更改,以期望的工作,但是這是想法。