0

サーバーからxmlドキュメントを取得する必要があり、クライアントはそれに署名してサーバーに送り返します。

サーバー側には、ドキュメントを保存する Web メソッドがあります。

[WebMethod]
public static void SaveSignedDocument(string SignedData)
{
    SignedCms signedCms = new SignedCms();
    ....
}

次に、サーバーからドキュメントを取得し、成功した後、クライアントに署名させて送り返します。Javascript はこちら

// get xml to sign
$.ajax({
        type: "POST",
        url: "Default.aspx/GetXMLReceipt",
        data: "{'ITN': " + ITN + " }",
        contentType: "application/json; charset=utf-8",
        dataType: "xml",
        success: function (xml) {
            // xml file was got
            var xmlString = xmlToString(xmlData);
            // Sign data
            var SignedData = SignData(xmlString);

            // Send it to server
            $.ajax({
                url: 'Default.aspx/SaveSignedDocument',
                data: "{ 'SignedData': '" + SignedData + "' }",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data){
                    alert('Document was successfully sent!');
                }
                error: function (data, status, jqXHR) {
                    alert('Send signed data failed - ' + jqXHR);
                }
            });
        },
        error: function (data, status, jqXHR) {
            alert('Get data failed - ' + jqXHR);
        }
    });

問題は、2 回目のリクエストでアラートが発生しないことです。リクエストを同期に変更すると、すべて問題ありませんが、上記のように機能しないのはなぜですか? サーバーは何も受信せず、ネットワーク トラフィックを見ると、リクエストが中断されていることがわかります。なんで?

4

1 に答える 1

1

データを適切にエンコードします。文字列の連結は使用しないでください。正しい方法は次のとおりです。

data: JSON.stringify({ ITN: ITN }),

2番目のAJAXリクエストで:

data: JSON.stringify({ SignedData: SignedData })

このJSON.stringifyメソッドは、引数を適切にエンコードすることにより、有効なJSONをサーバーに送信していることを確認します。

于 2013-02-24T15:17:34.977 に答える