jQuery ajax请求代理

时间:2011-02-03 11:17:13

标签: javascript ajax jquery proxy

如何使用jQuery执行以下操作:

  1. 某些库通过发送ajax请求 $就
  2. 我需要抓住所有这些 请求,在某些情况下中止 他们,而是传递另一个 数据。
  3. 我发现,在jQuery 1.5中引入了新方法,例如ajaxPrefilterajaxTransport。我还尝试了ajaxSetup beforeSend, 但我无法达到这些工作的2分......

3 个答案:

答案 0 :(得分:0)

除非您确定自己在做什么,否则不要使用此

我不确定ajax intercepter库。但我可以告诉你讨厌的黑客

  • 获取原始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
}
  • 你的ajax调用onsucess将你的ajax包装器重新分配给jquery ajax

               oldAjaxInstance = $.ajax;  
               $.ajax = myAjaxwrapper;
    

答案 1 :(得分: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;

答案 2 :(得分:0)

好的,这个问题已在jQuery 1.5.1中修复。