Jquery UI选项卡中止不起作用

时间:2009-11-04 23:07:40

标签: asp.net ajax jquery-ui jquery

我有一个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请求时,请求不会终止。他们继续跑步。

我看到警告框,所以我知道它已超时,但请求仍在继续。

修改

我只是不知道为什么会这样。就像当一个标签被加载时,它会转到我的服务器,该方法总是返回一个局部视图。所以我不确定这是一个部分观点还是没有搞砸的事实。即使我试图“中止”它,似乎请求仍然试图去。

4 个答案:

答案 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网络协议栈。

您的请求可能不会因为您正在进行网络系统调用而中止。