1. 程式人生 > >ajax.setup函式實現對ajax請求資料的修改

ajax.setup函式實現對ajax請求資料的修改

前言:

有一個需求是把頁面中的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 請求規定設定。

ajaxSetup

 

二、如上圖中的名值關係所示,有一個beforeSend,這個函式也就是在傳送 ajax 請求之前的回撥函式,用於在向伺服器傳送請求前執行一些動作

所以我在回撥函式中,通過修改arguments物件裡面的引數,從而修改傳送到後臺的資料;

三、通過修改argument物件裡面的引數,可以修改傳送到後臺的資料

arguments打印出來可以發現arguments是一個長度為2的陣列,通過arguments[1].data 可以獲取到請求頭中的資料;但是他其實是一個偽陣列,他並沒有JavaScript陣列物件的方法。

arguments物件
arguments物件