ajax.setup函式實現對ajax請求資料的修改
阿新 • • 發佈:2018-11-03
前言:
有一個需求是把頁面中的ajax請求的資料進行修改,將傳送給後臺的字串每個字元中間加一個“%”實現模糊查詢,但是ajax函式是別人封裝好的,所以我不便於改動,於是經過萬能的百度和谷歌搜尋,找到了一個解決辦法。就是下面一段程式碼解決了我的問題,可能寫的不好但是還是有參考價值的。
$.ajaxSetup({ beforeSend:function(xhr) { var params = arguments[1].data; //urlcode編碼格式的資料 //將urlcode編碼轉化為json var paramsJson = {}; params.replace(/([^?&]+)=([^?&]+)/g, function(s, v, k) { paramsJson[v] = decodeURIComponent(k); return k + '=' + v; }); if("bpName" in paramsJson){ paramsJson.bpName = paramsJson.bpName.trim().split('').join('%'); var paramsString = ""; //將json格式轉化為urlcode編碼格式的資料 for(var key in paramsJson){ paramsString = paramsString + key + "="+ encodeURIComponent(paramsJson[key])+"&"; } paramsString.substr(0,paramsString.length-1); //修改引數 arguments[1].data = paramsString; } } });
一、用jQuery.ajaxSetup實現對請求和相應資料的過濾
jQuery有一個 ajaxSetup 方法,該方法可以設定全域性 ajax 初始化引數,也就是說在聲明瞭該方法之後的所有 ajax 請求都會預設使用該方法設定的初始值。
AjaxSetup函式詳解:http://www.runoob.com/jquery/ajax-ajaxsetup.html
該引數為帶有一個或多個名稱/值對的 AJAX 請求規定設定。
二、如上圖中的名值關係所示,有一個beforeSend,這個函式也就是在傳送 ajax 請求之前的回撥函式,用於在向伺服器傳送請求前執行一些動作 。
所以我在回撥函式中,通過修改arguments物件裡面的引數,從而修改傳送到後臺的資料;
三、通過修改argument物件裡面的引數,可以修改傳送到後臺的資料
將arguments打印出來可以發現arguments是一個長度為2的陣列,通過arguments[1].data 可以獲取到請求頭中的資料;但是他其實是一個偽陣列,他並沒有JavaScript陣列物件的方法。