關於Ajax的type為post提交方式出現請求失效問題


【Ajax易錯集合】:關於Ajax的type為post提交方式出現請求失效問題的症結排查感想

最近碰到這樣一個問題,原本一個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數據至后台服務了的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM