我需要从服务器获取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);
}
});
问题是第二次请求的警报都没有发生。如果我将请求更改为同步,一切都可以,但为什么它不像上面所写的那样工作?服务器什么都没有收到,如果我们查看网络流量,我看到请求被中断。为什么呢?
答案 0 :(得分:1)
正确编码数据,不要使用任何字符串连接。这是正确的方法:
data: JSON.stringify({ ITN: ITN }),
以及您的第二个AJAX请求:
data: JSON.stringify({ SignedData: SignedData })
JSON.stringify
方法将确保您通过正确编码参数向服务器发送有效的JSON。