首頁 >web前端 >js教程 >ajax的參數過長無法提交如何處理

ajax的參數過長無法提交如何處理

php中世界最好的语言
php中世界最好的语言原創
2018-04-03 09:49:391977瀏覽

這次帶給大家ajax的參數過長無法提交如何處理,處理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的了。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

ajax跨域存取報錯501怎麼處理

使用Ajax實現根據人力資源系統資料增加OA帳號的方法

#

以上是ajax的參數過長無法提交如何處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn