Jquery 如何愚弄jqXHR使其永远成功

Jquery 如何愚弄jqXHR使其永远成功,jquery,Jquery,我试图让jQuery的ajax调用始终返回,就好像它们成功了一样, e、 g.即使我没有网络,我也会返回一些本地保存的数据 有可能吗 我尝试使用$.ajaxPrefilter并调用jqXHR的success函数, 但它仍然不会表现为请求已完成:( 谢谢!我认为您应该根据需要使用任何代码来处理ajax错误 错误(jqXHR、textStatus、, 错误抛出) 函数一个待实现的函数 如果请求失败,则调用 函数接收三个参数: jqXHR(在jquery1.4.x中, XMLHttpRequest)对

我试图让jQuery的ajax调用始终返回,就好像它们成功了一样, e、 g.即使我没有网络,我也会返回一些本地保存的数据

有可能吗

我尝试使用$.ajaxPrefilter并调用jqXHR的success函数, 但它仍然不会表现为请求已完成:(


谢谢!

我认为您应该根据需要使用任何代码来处理ajax错误

错误(jqXHR、textStatus、, 错误抛出)

函数一个待实现的函数 如果请求失败,则调用 函数接收三个参数: jqXHR(在jquery1.4.x中, XMLHttpRequest)对象,一个字符串 描述发生的错误类型 发生错误,并且出现可选异常 对象,如果发生。可能 第二个参数的值 (除null外)为“超时”、“错误”, “abort”和“parsererror”。当 发生HTTP错误,错误抛出 接收文档的文本部分 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...
            }
        }

您可以在发送前使用自己的自定义
处理程序。在处理程序中,您可以检查url是否可访问,如果不可访问,您可以取消请求并使用自己的数据模拟呼叫成功。

好吧,快速更新:上述解决方案中没有一个有效。
为了解决这个问题,我最终要做的是用我的实现替换jQuery的ajax函数,它检查是否存在网络连接。
如果有,我将请求代理回原始ajax函数,否则,我将创建与ajax相同的返回结构并返回它

同样,我讨厌回答我自己的问题,尤其是当这不是一个真正的答案,而是一个解决办法的时候。
悲哀…

如果我理解正确,你想让jqXHR表现得像成功了一样,而实际上失败了吗

如果是这样,.pipe是您的朋友:)

我最近想这么做,但找不到任何简单的说明,希望能有所帮助。 我对参数传递不是很确定,因为我只是在愤怒中使用了第一种形式——我们不需要任何参数传递给成功回调


烟斗是邪恶的。

你为什么要这样做?如果您想返回本地数据作为回退,为什么不做自然的事情,并利用错误处理程序激活回退?我希望这种行为,所以当我返回回退上的本地数据时,我希望这是透明的,如果请求成功,我有一种方法可以在不等待超时的情况下查找我是否有权访问请求的url,并且我不希望用户等到超时。如果您知道您的url不可访问,则可以将超时设置为0。如果成功的话,试试看……谢谢,我的问题是如何模仿成功的召唤。你能举个例子吗?等我有时间的时候,我会试着弄一把小提琴。现在我想你可以从设置对象中检索
success
,你可以在发送
beforeSend
处理程序之前使用它。正如我所说,我确实调用了success func。但是单独调用它似乎不会产生与成功的ajax调用相同的效果(我仍然得到一个超时…),你是什么意思?您是否取消了原始XHR?请尝试下面我的回答。。。我认为这可能会有所帮助:)从jQuery1.8开始,管道已经被弃用。请参阅中的评论。
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); });