ajax快速解決參數(shù)過(guò)長(zhǎng)無(wú)法提交成功的問(wèn)題
查了很多資料都說(shuō),get方法的參數(shù)是有限制的,post方法的參數(shù)的長(zhǎng)度是無(wú)限制,這也是post相比get的優(yōu)勢(shì)一直。
在ajax中使用post方法,用常規(guī)的參數(shù)格式:param1=a1¶m2=a2 ,當(dāng)參數(shù)長(zhǎng)度過(guò)長(zhǎng)時(shí),依然提交不成功。比如我們經(jīng)常這樣寫一個(gè)ajax的post請(qǐng)求:
$.ajax({ type: "post", // post or get contentType:"application/json;charset=utf-8", data: “requestTag=”+tag+"&content="+content, //請(qǐng)求參數(shù) url: "postMockJson", //地址 dataType: "text", error: function (err) { outLog("錯(cuò)誤"+err); }, success: onSaveSuccess });
這樣使用的時(shí)候,發(fā)現(xiàn)若是參數(shù)2:content內(nèi)容過(guò)多時(shí),比如我傳的是一個(gè)比較大的文本內(nèi)容,我在后臺(tái)服務(wù)(我用的是servlet)中獲取時(shí):
String content= request.getParameter("content");
這里的content的值,為null。
還有一種快捷的方法可以查看ajax請(qǐng)求是否成功,使用F12開(kāi)發(fā)者工具進(jìn)行調(diào)試,在執(zhí)行完ajax代碼后,在F12工具中的network選項(xiàng)頁(yè)面中,可以看到發(fā)起的請(qǐng)求,這時(shí)候看到的請(qǐng)求的參數(shù)有錯(cuò)誤提示。
解決方法:
ajax的參數(shù)格式還有另外一種寫法:json格式的請(qǐng)求參數(shù),我可以寫成這樣:
var param = "{requestTag:\""+requestTag+"\",content:\""+content+"\"}";
(ps:注意json格式要正確)
這個(gè)時(shí)候,若是使用F12進(jìn)行debug,可以看到請(qǐng)求的參數(shù)的數(shù)據(jù)都是正確的。
那么問(wèn)題來(lái)了,我在servlet中獲取的content依舊是null,這是為什么呢???
由于請(qǐng)求參數(shù)是一個(gè)json數(shù)據(jù)塊,所以這種request.getParameter(“content”)方法,當(dāng)然獲取不到數(shù)據(jù)啦,因?yàn)樗粫?huì)給我們解析json數(shù)據(jù)。
那么我們傳遞的參數(shù)數(shù)據(jù)在哪里呢?
重點(diǎn)來(lái)了:數(shù)據(jù)都在request對(duì)象里。
那么我們就用最原始的方法,通過(guò)數(shù)據(jù)流的方法獲取傳遞的數(shù)據(jù),如下:
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(); }
這時(shí)候,我們的json數(shù)據(jù)都在sb對(duì)象中了,接下來(lái)只需要解析json對(duì)象就可以了:
JSONObject jobject = JSONObject.fromObject(sb.toString()); String requestTag = jobject.getString("requestTag"); String content = jobject.getString("content");
到這里,我們就可以獲取到content的了。
以上這篇ajax快速解決參數(shù)過(guò)長(zhǎng)無(wú)法提交成功的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
ajax 異步獲取數(shù)據(jù)實(shí)現(xiàn)代碼 (js創(chuàng)建ajax對(duì)象)
ajax實(shí)現(xiàn)異步獲取數(shù)據(jù)代碼,非常不錯(cuò),大家可以參考下,這個(gè)是應(yīng)用于用戶名的實(shí)時(shí)監(jiān)測(cè)。2009-11-11經(jīng)典的20道AJAX面試題(必知必會(huì))
本文給大家介紹20道jquery ajax面試題,在前端開(kāi)發(fā)階段經(jīng)常會(huì)問(wèn)到,今天小編給大家分享經(jīng)典的20道AJAX面試題,感興趣的朋友一起學(xué)習(xí)吧2016-09-09使用Yii整合的pjax(pushstate+ajax)實(shí)現(xiàn)無(wú)刷新加載頁(yè)面
本篇文章給大家介紹Yii整合pjax(pushstate+ajax)實(shí)現(xiàn)無(wú)刷新加載頁(yè)面,小伙伴跟著小編一起學(xué)習(xí)吧2015-09-09javascript對(duì)XMLHttpRequest異步請(qǐng)求的面向?qū)ο蠓庋b
對(duì)XMLHttpRequest異步請(qǐng)求的面向?qū)ο蠓庋b,需要的朋友可以參考下。2009-12-12Ajax局部刷新應(yīng)用案例---簡(jiǎn)單登錄
Ajax局部刷新在之前的文章中也有介紹過(guò),下面以一個(gè)登錄的例子為大家介紹下其具體的使用2013-12-12Ajax實(shí)現(xiàn)動(dòng)態(tài)加載組合框的實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了Ajax實(shí)現(xiàn)動(dòng)態(tài)加載組合框功能,感興趣的朋友一起看看吧2017-08-08