Ajax請(qǐng)求數(shù)據(jù)傳遞的問題

Ajax請(qǐng)求數(shù)據(jù)傳遞的問題

問題描述 在一個(gè)項(xiàng)目的編寫中,由于前臺(tái)與后天的數(shù)據(jù)交換积担,我們會(huì)很頻繁的使用到Ajax請(qǐng)求,這是就會(huì)出現(xiàn)很多的小問題導(dǎo)致我們傳遞數(shù)據(jù)失敗或者傳遞過去錯(cuò)誤的數(shù)據(jù)。

細(xì)節(jié)一:get請(qǐng)求與post請(qǐng)求的應(yīng)用,兩者除了加密的問題易桃,另一點(diǎn)也就涉及到數(shù)據(jù)量的問題褥琐,當(dāng)我們想要傳遞的數(shù)據(jù)量很大锌俱,這個(gè)時(shí)候就需要使用post請(qǐng)求,get請(qǐng)求就相當(dāng)于是將數(shù)據(jù)加載url后可能出現(xiàn)過長(zhǎng)的問題倒是數(shù)據(jù)請(qǐng)求失敗

細(xì)節(jié)二:格式上的問題敌呈,Ajax請(qǐng)求可以使用很多的格式

  • application/x-www-form-urlencoded格式
$.ajax({
    url: "${base.contextPath}/cux/gxp/vendor/basic/query",
    type:'POST',
    dataType: "json",
    data: (function(){
        window.viewModel.model.set("page",1);
        window.viewModel.model.set("pageSize",100000);
        return Hap.prepareQueryParameter(viewModel.model.toJSON());
    })(),
    contentType: "application/x-www-form-urlencoded",  //設(shè)置傳參的格式
})

這種方式傳遞過去的數(shù)據(jù)形式

mark

后臺(tái)接受數(shù)據(jù):

@RequestMapping(value = "/cux/gxp/vendor/basic/query")
@ResponseBody
public ResponseData query(GxpVendorBasic dto, @RequestParam(defaultValue = DEFAULT_PAGE) int page,
    @RequestParam(defaultValue = DEFAULT_PAGE_SIZE) int pageSize, HttpServletRequest request) {
    IRequest requestContext = createRequestContext(request);
    return new ResponseData(service.selectVendor(requestContext,dto,page,pageSize));
}

我們可以用一個(gè)實(shí)體類的對(duì)象來接受各個(gè)對(duì)應(yīng)的參數(shù)贸宏,也可以用@RequestParam注釋來獲得數(shù)據(jù)造寝。

注意點(diǎn):當(dāng)我們用這種形式來傳遞一個(gè)數(shù)組形式的數(shù)據(jù)時(shí)會(huì)出現(xiàn)

mark

傳遞過去的數(shù)組形式是每個(gè)參數(shù)后面會(huì)有一個(gè) [] 這樣的形式,這樣后臺(tái)接受到的數(shù)據(jù)就需要處理參數(shù)帶有[]的問題吭练,雖然我可以在后臺(tái)通過替換字符的方式達(dá)到處理數(shù)據(jù)的目的诫龙,但是這樣始終是存在隱患的,最好是在前臺(tái)就將數(shù)據(jù)處理好鲫咽。

處理方法:在Ajax中加一個(gè)參數(shù)的限定

$.ajax({
    type: 'GET',
    url: "${base.contextPath}/hmdmwfl/batch/submit",
    traditional: true,   //這里設(shè)置為true,用來序列化數(shù)組參數(shù)
    success: function (json) {
        kendo.ui.showInfoDialog({
            message: json.message
        }).done(function () {
            if (json.success) {
                window.location.reload();
            }
        });
    },
    async: false,
    dataType: "json",
    data: {"docIds": docIds, "approveCode": approveCode} 
});

就是其中的 traditional: true; 這個(gè)參數(shù)的設(shè)置可以用來序列化數(shù)組签赃,處理之后的數(shù)據(jù)形式如下:

mark

這樣在后臺(tái)就無需處理 “[]”的問題了

  • contentType: "application/json" 格式
$.ajax({
    url: "${base.contextPath}/hmdmwfl/query/canclewf",
    type:'POST',
    dataType: "json",
    data:(function(){
      return JSON.stringify({"ids":basicIds,"approveCode":approveCode,"uids":uids});
    })(),
    async:false,
    traditional: true,//這里設(shè)置為true
    contentType: "application/json",  //設(shè)置傳參的格式
    success: function (data) {
        datas =data;
    }
});

這種格式也是我們hap用的最多的一種格式,這種格式主要就是注意后臺(tái)用什么對(duì)象來接收數(shù)據(jù)


mark

細(xì)節(jié):就是看你傳遞的數(shù)據(jù)最外圍是{}還是[],像上面這種傳遞過去的參數(shù)就是用{}包裹的分尸,這個(gè)時(shí)候后臺(tái)就應(yīng)該用對(duì)象來接收锦聊,同時(shí)注意的就是用@RequestBody注釋來直接獲取請(qǐng)求的body中的數(shù)據(jù)這樣的話取數(shù)據(jù)就會(huì)麻煩一些。

$.ajax({
    url:"${base.contextPath}/cux/gxp/vendor/basic/ignore/submit",
    dataType:"json",
    contentType:"application/json",
    type:"POST",
    data:(function(){
        return JSON.stringify([{"basicId":basicIds[i]}]);
    })(),
    async:false,
});

我們可以手動(dòng)添加一個(gè)[],這樣在后來就可以用List來接收參數(shù)

mark

這樣取數(shù)據(jù)就可以直接遍歷list中的實(shí)體類對(duì)象了箩绍。

*hap框架中需要注意的一點(diǎn):因?yàn)?code>hap用的kendo ui框架孔庭,數(shù)據(jù)的使用多用到viewModel,我們?cè)谧远x一個(gè)Ajax時(shí)會(huì)出現(xiàn)當(dāng)一個(gè)input輸入框中的值是手動(dòng)刪除清空的情況下材蛛,會(huì)將這個(gè)input的值變?yōu)?code>“”空字符圆到,而不是 null,可能就出現(xiàn)用這個(gè)字段去查詢查不到值的情況卑吭,這個(gè)問題的解決方法框架已經(jīng)封裝好就是 Hap.prepareQueryParameter(viewModel.model.toJSON())這個(gè)方法芽淡,會(huì)幫助去掉空字符的參數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豆赏,一起剝皮案震驚了整個(gè)濱河市吐绵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌河绽,老刑警劉巖己单,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異耙饰,居然都是意外死亡纹笼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門苟跪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廷痘,“玉大人,你說我怎么就攤上這事件已∷穸睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵篷扩,是天一觀的道長(zhǎng)兄猩。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么枢冤? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任鸠姨,我火速辦了婚禮,結(jié)果婚禮上淹真,老公的妹妹穿的比我還像新娘讶迁。我一直安慰自己,他們只是感情好核蘸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布巍糯。 她就那樣靜靜地躺著,像睡著了一般客扎。 火紅的嫁衣襯著肌膚如雪鳞贷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天虐唠,我揣著相機(jī)與錄音搀愧,去河邊找鬼。 笑死疆偿,一個(gè)胖子當(dāng)著我的面吹牛咱筛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杆故,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼迅箩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了处铛?” 一聲冷哼從身側(cè)響起饲趋,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撤蟆,沒想到半個(gè)月后奕塑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡家肯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年龄砰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讨衣。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡换棚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出反镇,到底是詐尸還是另有隱情固蚤,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布歹茶,位于F島的核電站夕玩,受9級(jí)特大地震影響你弦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜风秤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一鳖目、第九天 我趴在偏房一處隱蔽的房頂上張望扮叨。 院中可真熱鬧缤弦,春花似錦、人聲如沸彻磁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衷蜓。三九已至累提,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間磁浇,已是汗流浹背斋陪。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留置吓,地道東北人无虚。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像衍锚,于是被迫代替她去往敵國(guó)和親友题。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容