2011-02-03 221 views
3

我怎樣才能做到與jQuery以下操作:jQuery的Ajax請求代理

  1. 某些庫發送Ajax請求通過 $就
  2. 我需要捕捉這些 請求,並在某些情況下,中止 他們,而是傳遞另一個 數據。

我發現,在jQuery 1.5中引入新的方法,如ajaxPrefilterajaxTransport。我也試過用ajaxSetupbeforeSend, 但我不能達到2分這些工作......

+0

您是否需要捕捉請求或響應?當然,如果你需要捕捉請求你只想把一個if圍繞$阿賈克斯,而不是陳述書上作出的請求......在你的答案 – Rob 2011-02-03 11:40:46

回答

0

好的,這個問題在jQuery 1.5.1中修復。

0

不要使用這個,除非,直到你該死肯定你在做什麼

我不確定ajax intercepter庫。但我可以告訴你討厭的黑客你原來的jQuery AJAX實例

 var oldAjaxInstance; //some global variable 
     oldAjaxInstance = $.ajax; //in document load 
    • 採取拷貝並分配intercepert方法到$就指針

       $.ajax = myAjaxwrapper; 
      

    myAjaxwrapper看起來像這樣

    function myAjaxwrapper(a) { 
        //your logic to change the request data's 
        if (you are ok to allow the ajax call) { 
         //re Assgin the actual instance of jquery ajax 
         $.ajax =oldAjaxInstance;   
         //and call the method 
         $.ajax(a); 
        } 
        //Otherwise it wont be called 
    } 
    
    • 而且你的Ajax調用的onsucess重新分配您的Ajax調用jQuery的AJAX

        oldAjaxInstance = $.ajax; 
            $.ajax = myAjaxwrapper; 
      
  • +0

    常見的問題是,我無法訪問$就...在能解僱任何圖書館。我要在外面接住... – 2011-02-03 12:17:24

    0

    奇怪,但它僅適用於對夫婦有兩個方法:)

    function enableFakeAjax(isEnable, fakeData) { 
        isFakeAjax = isEnable; 
    
        $.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
        if (isFakeAjax) { 
         jqXHR.abort(); 
    
         originalOptions.success(fakeData); 
        } 
        }); 
    
        $.ajaxSetup({ 
        beforeSend: function(jqXHR, settings) { 
         if (isFakeAjax) { 
         jqXHR.abort(); 
         } 
        } 
        }); 
    } 
    
    
    enableFakeAjax(true, jsonData); 
    isFakeAjax = false;