【问题标题】:Jquery UI tabs abort does not workJquery UI 选项卡中止不起作用
【发布时间】:2009-11-04 23:07:40
【问题描述】:

我有一个 jquery ui 1.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 请求时,请求并没有终止。他们继续奔跑。

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

编辑

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

【问题讨论】:

  • 您好,我已经修改了昨晚的回答。你可能想再看一遍:-)

标签: asp.net ajax jquery-ui jquery


【解决方案1】:

我建议对 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'); } );

【讨论】:

  • 我认为它被 ajaxSetup 覆盖了。
  • 您的评论让我在文档中四处寻找。看来您无法使用 $.ajaxSetup() 提供全局错误处理程序,您需要使用 $('selector').ajaxError()。我已经更新了。
【解决方案2】:

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

function errorCallback(XMLHttpRequest, textStatus, errorThrown) { .... }

然后像这样从错误块中调用函数:

$.ajaxOptions({'error' : errorCallback });

这可以防止在评估 ajaxOptions 时立即评估来自 'errorCallback' 函数的代码。 (我认为)

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

XmlHttpRequest.abort(); 

在调用 jalert 以手动中止 xhr 请求之后。 (这个功能IE和火狐都一样,其他浏览器不清楚)

【讨论】:

  • 嗯,它似乎仍然不起作用。就像萤火虫仍然显示它仍在尝试执行请求。就像选项卡停止说它正在加载但根据萤火虫它仍在运行并且它的效果就像它正在运行一样。我注意到我的 ajax 选项卡是,如果请求正在运行并且您尝试切换选项卡,所有选项卡都会搞砸,这就是当请求应该被“中止”中止时发生的情况
  • 您能添加您尝试过的各种迭代吗?也许这会帮助我们解决问题。
  • 我厌倦了你上面的代码和我在原始帖子中的代码。
  • 谢谢。问题是该请求似乎永远不会被正确终止。不知道如何阻止它。
【解决方案3】:

既然你说你看到了警报,Ajax 错误处理程序就被调用了,显然 tabs abort() 方法也被调用了。我建议您使用 Firebug 来查看调用 abort 方法时发生的情况。下载一个开发版的jQu​​ery UI,在ui.tabs.js文件下下断点(abort方法最后关闭)。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多