2011-02-03 3 views
3

Как я могу сделать следующую операцию с JQuery:JQuery запрос Ajax прокси

  1. Некоторые запрос библиотека отправить Аякса через $ .ajax
  2. мне нужно, чтобы поймать все эти запросы, а в некоторых случаях прервать , а вместо этого передать еще данных.

Я обнаружил, что в jQuery 1.5 были введены новые методы, такие как ajaxPrefilter и ajaxTransport. Я также попытался ajaxSetup с beforeSend, , но я не могу достигнуть 2 балла из этих рабочих ...

+0

Вам нужно уловить запрос или ответ? конечно, если вам нужно поймать запрос, вы просто положите оператор if вокруг $ .ajax и не сделаете запрос ... – Rob

ответ

0

ОК, эта проблема была исправлена ​​в jQuery 1.5.1.

0

Не используйте это, если пока вы не чертовски уверены, что вы делаете

Я не уверены в библиотеках межсетевого интерфейса ajax. Но я могу вам сказать, противный хак

  • Тейк копию исходного JQuery Ajax например

     var oldAjaxInstance; //some global variable 
         oldAjaxInstance = $.ajax; //in document load 
    
  • И назначьте метод intercepert к $ .ajax указатель

     $.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 
} 
  • И onsucess вашего AJAX вызова переназначить ваш АЯКС обертку для JQuery Ajax

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

Общей проблемой в вашем ответе является то, что я не могу получить доступ к $ .ajax ... In could пожара любой библиотеки. Я должен поймать его за пределами ... –

+0

@Alex, вы правы ... вот почему я предупредил вас в самом начале ... :( – RameshVel

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; 
Смежные вопросы