如何欺骗jqXHR永远成功

时间:2011-06-15 08:43:34

标签: jquery

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

有可能吗?

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

谢谢!

4 个答案:

答案 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相同的返回结构并返回它

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