如何欺骗jqXHR始终成功

问题描述

| 我正在尝试使jQuery的ajax调用总是像成功一样返回, 例如即使我没有网络,我也会返回一些本地保存的数据 有可能吗 我尝试使用$ .ajaxPrefilter并调用jqXHR的成功函数, 但它仍然不会表现出请求已完成的行为:( 谢谢!     

解决方法

        如果im正确理解了您的意思,那么您想让jqXHR像成功一样工作,而实际上却失败了? 如果是这样,.pipe是您的朋友:)
var jqDeferred = $.ajax(...something something);

//make the deferred always resolve as success,calling all success callbacks on original.
//AFAIK,dosent pass any arguments to the original success callbacks.
jqDeferred.pipe( null,function(args){ return $.Deferred().resolve(); });

//same as above,but try to pass all arguments through to the success callbacks.
jqDeferred.pipe( null,function(args){ return $.Deferred().resolve.apply(this,arguments); });
我最近想这样做,找不到任何简单的说明,希望对您有所帮助。 我对传递参数并不十分确定,因为我只在愤怒时才使用第一种形式-我们不需要将任何传递给成功回调的参数。 管道是邪恶的。     ,        我认为您应该使用自己需要的任何代码来处理该ajax错误。   错误(jqXHR,textStatus,   errorThrown)           功能一个要成为的功能     如果请求失败,则调用。的     函数接收三个参数:     jqXHR(在jQuery 1.4.x中,     XMLHttpRequest)对象,一个字符串     描述错误的类型     发生和可选异常     对象(如果发生)。可能     第二个参数的值     (除null外)是\“ timeout \”,\“ error \”,     \“中止\”和\“ parsererror \”。当一个     HTTP错误发生,errorThrown     接收的文本部分     HTTP状态,例如\“未找到\”或     \“内部服务器错误。\”从jQuery开始     1.5,错误设置可以接受一系列函数。每个功能将     依次被调用。注意:此处理程序     不需要跨域脚本     和JSONP请求。这是一个Ajax     事件。    例
 error: function (xhr,status,error) {
            var err = eval(\"(\" + xhr.responseText + \")\");
            if (err.Message == \'SomeMessage\') {
               //Return Your data,handle this error...
            }
        }
    ,        您可以将.ajaxSetup与您自己的自定义
beforeSend
处理程序一起使用。在您的处理程序中,您可以检查网址是否可访问,如果不是,则可以取消请求并使用您自己的数据模拟成功调用。     ,        好吧,快速更新:以上解决方案均无效。 为了解决这个问题,我最终要做的是用我的实现替换jQuery的ajax函数,该函数检查是否存在网络连接。 如果存在,我将请求代理回原始的ajax函数,否则,我将创建与ajax相同的返回结构并将其返回 同样,我讨厌回答自己的问题,尤其是当它不是真正的答案而是更多的解决方法时。 伤心...