本文主要為大家帶來一篇ajax快速解決參數過長無法提交成功的問題。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。
查了很多資料都說,get方法的參數是有限制的,post方法的參數的長度是無限制,這也是post相比get的優勢一直。
在ajax中使用post方法,用常規的參數格式:param1=a1¶m2=a2 ,當參數長度過長時,依然提交不成功。例如我們常這樣寫一個ajax的post請求:
$.ajax({ type: "post", // post or get contentType:"application/json;charset=utf-8", data: “requestTag=”+tag+"&content="+content, //请求参数 url: "postMockJson", //地址 dataType: "text", error: function (err) { outLog("错误"+err); }, success: onSaveSuccess });
這樣使用的時候,發現若是參數2:content內容過多時,例如我傳的是一個比較大的文字內容,我在後台服務(我用的是servlet)取得時:
String content= request.getParameter("content");
這裡的content的值,為null。
還有一個快速的方法可以查看ajax請求是否成功,使用F12開發者工具進行調試,在執行完ajax程式碼後,在F12工具中的network選項頁面中,可以看到發起的請求,這時候看到的請求的參數有錯誤提示。
解決方法:
ajax的參數格式還有另外一種寫法:json格式的請求參數,我可以寫成這樣:
var param = "{requestTag: \""+requestTag+"\",content:\""+content+"\"}";
(ps:注意json格式要正確)
這個時候,若是使用F12進行debug,可以看到請求的參數的資料都是正確的。
那麼問題來了,我在servlet中取得的content依舊是null,這是為什麼呢? ? ?
由於請求參數是一個json資料塊,所以這種request.getParameter(“content”)方法,當然取得不到資料啦,因為它不會給我們解析json資料。
那麼我們傳遞的參數資料在哪裡呢?
重點來了:資料都在request物件裡。
那麼我們就用最原始的方法,透過資料流的方法取得傳遞的數據,如下:
request.setCharacterEncoding("UTF-8"); StringBuilder sb = new StringBuilder(); try(BufferedReader reader = request.getReader();) { char[] buff = new char[1024]; int len; while((len = reader.read(buff)) != -1) { sb.append(buff,0, len); } }catch (IOException e) { e.printStackTrace(); }
這時候,我們的json資料都在sb物件中了,接下來只需要解析json物件就可以了:
JSONObject jobject = JSONObject.fromObject(sb.toString()); String requestTag = jobject.getString("requestTag"); String content = jobject.getString("content");
到這裡,我們就可以取得到content的了。
相關推薦:
以上是ajax快速解決參數過長無法提交成功如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!