2012-05-14 27 views
0

我有一個圖像,我只是試圖顯示保存爲jquery ajax調用下載圖像的對話框。當如下用jquery和asp.net服務器端函數調用強制下載文件

$("#btnSaveAsImage").click(function() { 
    if (_TrackNumber == '') { 
     alert('Track Number is not valid'); 
     return; 
    } 
    var fname = _TrackNumber + '.gif'; 
    var DTO = { FileName: fname }; 

    jQuery.ajax({ 
     type: "POST", 
     url: "UPSLabelFormUK.aspx/SaveAs", 
     data: JSON.stringify(DTO), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      var retVal = data.d; 
      alert(retVal); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert(textStatus); 
     } 
    }); 
    return false; 
}); 

這個客戶端代碼實際上是調用我的服務器端功能的一些人會點擊按鈕,然後客戶端代碼運行,這裏代碼。服務器側功能看起來像

[WebMethod] 
    public static void SaveAs(string FileName) 
    { 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.WriteFile(HttpContext.Current.Server.MapPath(@"~/UPS_New/LabelImages/" + FileName)); 
     HttpContext.Current.Response.Flush(); 
     HttpContext.Current.Response.Close(); 
    } 

當服務器側功能執行結束然後jsuery顯示像解析錯誤一個錯誤消息。我只是不明白爲什麼錯誤來了,爲什麼保存爲對話不會來......任何想法請與我分享。謝謝

回答

0

你得到解析錯誤的原因是因爲jQuery被告知將AJAX調用的返回值解釋爲JSON。行dataType: "json"告訴jQuery你期望從服務器獲得JSON,所以它可以繼續運行它通過JSON解析器。但是,您的服務器正試圖返回一個數據流 - 明顯是而不是 JSON。

我不確定你想要做什麼是可能的。 AJAX並不意味着用於文件類型或基於流的響應。它旨在用於XML(異步JavaScript和XML)或JSON。無論哪種方式,AJAX通常用於解釋來自服務器的基於文本的響應,而不是基於流。所以你試圖用jQuery做什麼可能無法工作。

相反,爲什麼不提供圖像的直接下載鏈接。參考以下問題以供參考:

Open the Save Image dialog using jQuery/Javascript?

相關問題