最近碰到這樣一個問題,原本一個ajax異步提交數據之前是很好的,很多系統都延用了均未出現任何問題。最近這個版本卻出現ajax方式post數據不到后台程序,讓我折騰了好幾天。起初的ajax是這樣寫的:
01.
$.ajax({
02.
type:
'POST'
,
03.
url:
"/Ajax/SaveData.aspx"
,
04.
dataType:
"json"
,
05.
data:
"RequestTime="
+ (
new
Date()).toString()+
"&WorkFlowInfo="
+jsonText,
06.
beforeSend:
function
() {
07.
},
08.
success:
function
(msg) {
09.
$(
"div[class='datagrid-mask']"
).hide();
10.
$(
"div[class='datagrid-mask-msg']"
).hide();
11.
alert(msg.mes);
12.
if
(msg.op !=
"err"
)
13.
window.location.reload();
14.
15.
},
16.
error:
function
(errorMsg) {
17.
$(
"div[class='datagrid-mask']"
).hide();
18.
$(
"div[class='datagrid-mask-msg']"
).hide();
19.
alert(
"發生了一個錯誤"
);
20.
}
21.
});
當我的jsonText字符串不是很長的情況下,是可以post至后台服務的。那么既然我的type為post方式,與數據長短有何關系對吧?你或許會如此堅定的想。
易錯點:
那么為何當jsonText過長時post提交至后台失敗呢?細心的網友可能會發現雖然是post方式但是data的書寫方式是不對的,data原本就是接受json類型的參數和數據的,上面的代碼卻將之當做了直接在url內傳遞參數的形式,換言之就是將ajax的psot提交方式活生生地變換為了get方式提交。
get方式提交是直接在url內傳遞參數和數據,url內有最大字數限制的,所以當jsonText過長時就提交不至后台服務。
如何糾正?
既然是data的書寫方式不對,那么我們只需要糾正一下這個地方即可,糾正后的示例代碼如下所示:
01.
$.ajax({
02.
type:
'POST'
,
03.
url:
"/Ajax/SaveData.aspx"
,
04.
dataType:
"json"
,
05.
data: {RequestTime:(
new
Date()).toString(),WorkFlowInfo:escape(jsonText)},
06.
beforeSend:
function
() {
07.
},
08.
success:
function
(msg) {
09.
$(
"div[class='datagrid-mask']"
).hide();
10.
$(
"div[class='datagrid-mask-msg']"
).hide();
11.
alert(msg.mes);
12.
if
(msg.op !=
"err"
)
13.
window.location.reload();
14.
15.
},
16.
error:
function
(errorMsg) {
17.
$(
"div[class='datagrid-mask']"
).hide();
18.
$(
"div[class='datagrid-mask-msg']"
).hide();
19.
alert(
"發生了一個錯誤"
);
20.
}
21.
});
這樣一來就可以正常post數據至后台服務了的。