0

私は1つの画像を持っていて、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 は parse error のようなエラー メッセージを表示します。エラーが発生する理由と、[名前を付けて保存] ダイアログが表示されない理由がわかりません。アイデアがあれば教えてください。ありがとう

4

1 に答える 1

0

解析エラーが発生する理由は、jQuery が AJAX 呼び出しの戻り値を JSON として解釈するように指示されているためです。この行dataType: "json"は、サーバーからの JSON を予期していることを jQuery に伝えているため、JSON パーサーを介して実行することができます。ただし、サーバーはデータ ストリームを返そうとしています。明らかにJSON ではないものです。

あなたがやろうとしていることが可能かどうかはわかりません。AJAX は、ファイル タイプまたはストリーム ベースの応答に使用するためのものではありません。XML (非同期 Javascript およびXML ) または JSON に使用するためのものです。いずれにせよ、AJAX は通常、ストリームベースではなく、サーバーからのテキストベースの応答を解釈するために使用されます。したがって、jQuery でやろうとしていることは、おそらくうまくいかないでしょう。

むしろ、画像への直接ダウンロード リンクを提供しないでください。参考として、次の質問を参照してください。

jQuery/Javascript を使用して [画像の保存] ダイアログを開きますか?

于 2012-05-14T14:19:59.577 に答える