问题描述
|
我正在尝试使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相同的返回结构并将其返回
同样,我讨厌回答自己的问题,尤其是当它不是真正的答案而是更多的解决方法时。
伤心...