Asp.net Jquery UI选项卡中止不起作用

Asp.net Jquery UI选项卡中止不起作用,asp.net,ajax,jquery-ui,jquery,Asp.net,Ajax,Jquery Ui,Jquery,我有一个jQueryUI1.7选项卡,我正在尝试“中止”请求 所以我在我的文档rdy中有这个 $.ajaxSetup( { 'timeout': 10000, 'error': function errorCallback() { jAlert('The server is acting a bit slow. Your request has timed out. Pl

我有一个jQueryUI1.7选项卡,我正在尝试“中止”请求

所以我在我的文档rdy中有这个

   $.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请求时,请求不会终止。他们继续跑

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

编辑

我只是不知道为什么会这样。就像当一个选项卡被加载时,它会进入我的服务器,并且该方法总是返回一个局部视图。所以我不确定这是一个片面的观点还是没有搞砸。尽管我试图“中止”请求,但请求似乎仍在尝试执行。

很可能是$('tabs')。tabs('abort');函数不起作用,因为在计算错误代码时(即创建选项卡之前),选项卡还不存在。因此,当您稍后尝试运行该侦听器时,它会中断,从而阻止jQuery中止XHR请求。尝试使用错误块的三个参数编写回调函数,如下所示:

function errorCallback(XMLHttpRequest, textStatus, errorThrown) { .... }
$.ajaxOptions({'error' : errorCallback });
然后从错误块调用函数,如下所示:

function errorCallback(XMLHttpRequest, textStatus, errorThrown) { .... }
$.ajaxOptions({'error' : errorCallback });
这可以防止在计算ajaxOptions时立即计算“errorCallback”函数中的代码。(我想)

如果这样做不起作用,您可以随时添加

XmlHttpRequest.abort(); 

调用jalert手动中止xhr请求后。(这个函数对于IE和Firefox都是一样的,不确定其他浏览器)

我建议使用tabs()插件的ajaxOptions。我成功地使用了这个机制

$('#tabs').tabs({
    ajaxOptions: {
                      timeout: 10000,
                      error: function() {
                                 $('#tabs').tabs('abort');
                             }
                 }
});
首选该方法的一个原因可以在该方法的文档中找到:

请参阅$.ajax以了解所有 可用选项。注意:不要设置 完整、错误或错误的处理程序 成功与此方法有关; 改用全局ajax事件

如果要通过ajaxSetup提供默认值,则必须在此处提供一些默认值,然后使用其他默认值,等等,因为需要使用特定方法为这些默认值提供全局默认值。它还将这些默认设置的应用程序(包括中止任何选项卡方法)限制为仅使用选项卡插件,而不影响页面上的任何其他AJAX

如果您要更改错误处理,那么这也可能起作用

$.ajaxSetup( { timeout : 10000 } );
$('#tabs').ajaxError( function() { $(this).tabs('abort'); } );

因为您说您看到了警报,所以调用了Ajax错误处理程序,显然还调用了tabs abort()方法。我建议您使用Firebug来查看调用abort方法时发生的情况。下载jQuery UI的开发版本,并在UI.tabs.js文件中放置一个断点(终止方法在末尾关闭)。

只是猜测而已。Ajax在底层使用标准TCP/IP网络协议栈


您的请求可能不会被中止,因为您正在进行网络系统呼叫。

您好,我已经修改了昨晚的回答。你可能想再看一眼:-)嗯,它似乎仍然不起作用。像firebug一样,它仍然显示为仍在尝试执行请求。就像选项卡停止说它正在加载,但是根据firebug,它仍然在运行,并且它的效果就像它正在运行一样。我在ajax选项卡中注意到的是,如果一个请求正在运行,并且您尝试切换选项卡,那么所有选项卡都会出错,当请求应该通过“abort”中止时,就会发生这种情况。您可以添加您尝试过的各种迭代吗?也许这会帮助我们解决问题。我厌倦了你上面的代码和我在原始帖子中的代码。谢谢。问题是,请求似乎永远不会被正确地终止。不知道如何停止它。我想它会被ajaxSetup覆盖。你的评论让我在文档中翻来翻去。似乎无法使用$.ajaxSetup()提供全局错误处理程序,您需要使用$('selector').ajaxError()。我已经更新了。