0

我有一张图片,我只是想显示另存为对话框,以便通过 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();
    }

当服务器端函数执行结束时,jsuey 会显示一条错误消息,如解析错误。我只是不明白为什么会出现错误以及为什么没有保存为对话框......任何想法请与我分享。谢谢

4

1 回答 1

0

您收到解析错误的原因是因为 jQuery 被告知将 AJAX 调用的返回值解释为 JSON。该行dataType: "json"告诉 jQuery 您期待来自服务器的 JSON,因此它可以继续通过 JSON 解析器运行它。但是,您的服务器正试图返回一个数据流——这显然不是JSON。

我不确定您尝试做的事情是否可行。AJAX 不适用于文件类型或基于流的响应。它旨在用于 XML(异步 Javascript 和XML)或 JSON。无论哪种方式,AJAX 通常用于解释来自服务器的基于文本的响应,而不是基于流的。所以你试图用 jQuery 做的事情可能行不通。

相反,为什么不提供图像的直接下载链接。请参阅以下问题以获取参考:

使用 jQuery/Javascript 打开保存图像对话框?

于 2012-05-14T14:19:59.577 回答