JQuery AJAX запрос прокси - PullRequest
       8

JQuery AJAX запрос прокси

3 голосов
/ 03 февраля 2011

Как я могу выполнить следующую операцию с jQuery:

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

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

Ответы [ 3 ]

0 голосов
/ 03 февраля 2011

Странно, но работает только в паре с двумя способами:)

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;
0 голосов
/ 08 марта 2011

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

0 голосов
/ 03 февраля 2011

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

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

  • Возьмите копию вашего оригинального экземпляра jquery ajax

          var oldAjaxInstance; //some global variable
          oldAjaxInstance = $.ajax;  //in document load
    
  • И присвойте свой метод перехвата указателю $ .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
}
  • И после вашего вызова ajax переназначьте вашу оболочку ajax на jquery ajax

               oldAjaxInstance = $.ajax;  
               $.ajax = myAjaxwrapper;
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...