我有一个jquery ui 1.7选项卡,我试图“中止”请求。
所以我在我的文件中有这个。
$.ajaxSetup(
{
'timeout': 10000,
'error': function errorCallback()
{
jAlert('The server is acting a bit slow. Your request has timed out. Please try again.', 'Server Time Out Error.');
$('#tabs').tabs('abort');
}
});
$("#tabs").tabs();
然而,当用firebug查看我的ajax请求时,请求不会终止。他们继续跑步。
我看到警告框,所以我知道它已超时,但请求仍在继续。
修改
我只是不知道为什么会这样。就像当一个标签被加载时,它会转到我的服务器,该方法总是返回一个局部视图。所以我不确定这是一个部分观点还是没有搞砸的事实。即使我试图“中止”它,似乎请求仍然试图去。
答案 0 :(得分:2)
我建议在tabs()插件中使用ajaxOptions。我成功地使用了这个机制。
$('#tabs').tabs({
ajaxOptions: {
timeout: 10000,
error: function() {
$('#tabs').tabs('abort');
}
}
});
首选的一个原因可以在ajaxSetup方法的文档中找到:
有关所有内容的说明,请参阅$ .ajax 可用选项。注意:不要设置 处理程序完整,错误或 用这种方法成功的功能; 改为使用全局ajax事件。
如果您通过ajaxSetup提供默认值,则必须在那里提供一些默认值,然后提供其他默认值ajaxError等,因为您需要使用特定方法为这些默认值提供全局默认值。它还限制了这些默认值的应用,包括中止任何选项卡方法,仅限于选项卡插件,而不会影响页面上的任何其他AJAX。
如果您要更改错误处理,那么它也可能会起作用。
$.ajaxSetup( { timeout : 10000 } );
$('#tabs').ajaxError( function() { $(this).tabs('abort'); } );
答案 1 :(得分:1)
可能是$('#tabs')。tabs('abort');函数不起作用,因为在评估错误代码时(在创建选项卡之前),选项卡尚不存在。因此,当您稍后尝试运行时,该侦听器会中断,从而阻止jQuery中止XHR请求。尝试使用错误块的三个参数外部编写回调函数,如下所示:
function errorCallback(XMLHttpRequest, textStatus, errorThrown) { .... }
然后从错误块中调用函数,如下所示:
$.ajaxOptions({'error' : errorCallback });
这可以防止在评估ajaxOptions时立即评估'errorCallback'函数中的代码。 (我认为)
如果这样做不起作用,您可以随时添加
XmlHttpRequest.abort();
调用jalert后手动中止xhr请求。 (IE和Firefox的功能相同,不确定其他浏览器)
答案 2 :(得分:0)
由于您说您看到了警报,因此调用了Ajax错误处理程序,显然也会调用制表符abort()方法。我建议您使用Firebug来查看调用abort方法时发生的情况。下载jQuery UI的开发版本并在ui.tabs.js文件中放置一个断点(abort方法最后关闭)。
答案 3 :(得分:0)
只是一个猜测。 Ajax正在使用下面的标准TCP / IP网络协议栈。
您的请求可能不会因为您正在进行网络系统调用而中止。