我有一个图像,我只是试图通过jquery ajax调用显示另存为下载该图像的对话框。当某人点击按钮然后运行客户端代码时,这里的代码如下
$("#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 :(得分:0)
你得到解析错误的原因是因为jQuery被告知将AJAX调用的返回值解释为JSON。行dataType: "json"
告诉jQuery你期望从服务器获得JSON,所以它可以继续通过JSON解析器运行它。但是,您的服务器正在尝试返回数据流 - 显然不是 JSON。
我不确定你想做的事情是否可行。 AJAX不适用于文件类型或基于流的响应。它用于XML(异步Javascript和 XML )或JSON。无论哪种方式,AJAX通常用于解释来自服务器的基于文本的响应,而不是基于流的响应。所以你试图用jQuery做的事情可能不会起作用。
相反,为什么不提供图像的直接下载链接。请参阅以下问题以供参考: