我正在尝试让jQuery的ajax调用总是返回,好像它们成功了, 例如即使我没有网络,我也会返回一些本地保存的数据
有可能吗?
我尝试使用$ .ajaxPrefilter并调用jqXHR的成功函数, 但它仍然不会表现得好像请求已经完成:(
谢谢!
答案 0 :(得分:3)
如果我正确理解你,你想让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); });
我最近想做这件事并且找不到任何简单的指示,希望它有所帮助。 我不太确定传递的参数,因为我只在愤怒中使用了第一种形式 - 我们不需要将任何参数传递给我们的成功回调。
管道是邪恶的。
答案 1 :(得分:0)
我认为您应该根据需要处理任何代码的ajax错误。
错误(jqXHR,textStatus, errorThrown)
功能一个功能 如果请求失败则调用。该 函数接收三个参数: jqXHR(在jQuery 1.4.x中, XMLHttpRequest)对象,一个字符串 描述错误的类型 发生了和一个可选的例外 对象,如果发生了一个。可能 第二个参数的值 (除了null)是“超时”,“错误”, “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...
}
}
答案 2 :(得分:0)
您可以将.ajaxSetup与自己的自定义beforeSend
处理程序一起使用。在您的处理程序中,您可以检查网址是否可访问,如果不是,您可以取消请求并使用您自己的数据模拟成功调用。
答案 3 :(得分:-1)
嗯,快速更新:没有上述解决方案
我最终要解决这个问题,就是用我的实现取代jQuery的ajax函数,检查是否有网络连接。
如果有,我将请求代理回原来的ajax函数,否则,我创建与ajax相同的返回结构并返回它
同样,我讨厌回答我自己的问题,特别是当它不是一个真正的答案而是更多的解决方法时。 悲伤...