如何欺骗jqXHR永远成功

我试图让jQuery的ajax调用总是返回,好像他们成功了,例如即使我没有网络,我也会返回一些本地保存的数据

有可能吗?

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

谢谢!

如果我正确地理解你,你想让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); }); 

我最近想做这件事并且找不到任何简单的指示,希望它有所帮助。 我不太确定传递的参数,因为我只在愤怒中使用了第一种forms – 我们不需要将任何参数传递给我们的成功回调。

管子是邪恶的。

我认为您应该根据需要处理任何代码的ajax错误。

错误(jqXHR,textStatus,errorThrown)

函数如果请求失败,则调用的函数。 该函数接收三个参数:jqXHR(在jQuery 1.4.x中,XMLHttpRequest)对象,描述发生的错误类型的字符串和可选的exception对象(如果发生)。 第二个参数的可能值(除了null)是“timeout”,“error”,“abort”和“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处理程序一起使用。 在您的处理程序中,您可以检查URL是否可访问,如果不是,您可以取消请求并使用您自己的数据模拟成功调用。

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

再一次,我讨厌回答我自己的问题,特别是当它不是一个真正的答案而是更多的解决方法时。 伤心…