【问题标题】:Async in ajax does not work anymore under Chromeajax 中的异步在 Chrome 下不再起作用
【发布时间】:2014-04-04 09:39:57
【问题描述】:

我使用 jquery 1.9 几个月了,当用户单击链接时,我使用 jQuery 执行$.ajax

实际上,当用户单击该链接时,会在加载下一页(长时间加载)时执行 ajax 查询。这曾经在 Chrome 和 IE 9 下与 async: false 完美配合。

但两周前我已将 Chrome 更新到最新版本,但这不再起作用(ajax 未加载但出现下一页)。但它仍然可以在 IE 下运行。

这里是我的 $.ajax 代码:

function doOnClick(id) {
    $.ajax({
        dataType: "json",
        url: 'http://...",
        async: false,
        data: { id : id }
    }).success(function(data) {
        //do some stuff
}).fail(function(){ 
        //do some stuff 
    });
}

还有我的链接:

<a href="http://..." onclick="doOnClick(1);">link</a>

我的 JS 控制台没有错误。

【问题讨论】:

  • 添加代码是个好习惯:)
  • 在 99.99% 的情况下,不应使用 async: false。现在提供您正在使用的相关代码。顺便说一句,检查你的控制台,有什么错误吗?只是想知道,您是否试图覆盖 onbeforeunload 事件行为?如果是的话,chrome 不再支持它。在这种情况下,这是同步 ajax 请求准确的唯一 AFAIK 案例。现在当然可以有一个简单的解决方法
  • Chrome 停止支持async: false?是时候庆祝了,我猜:-D
  • 无法确认。 async.false 在我的 Chrome 版本中仍然有效。
  • 我编辑了我的帖子以提供代码。

标签: jquery ajax google-chrome


【解决方案1】:

使用异步请求,设置选项上下文:

$('.someLinks').on('click', function (e) {
    e.preventDefault();
    $.ajax({
        dataType: "json",
        url: url,
        data: param,
        context: this
    }).success(function (data) {
        //do some stuff
    }).fail(function () {
        //do some stuff 
    }).always(function () {
        this.click(); // call native click method // NOTE: don't use here: $(this).click();
    });
});

【讨论】:

  • “调用本机点击方法”几乎总是不受欢迎,因为它会导致导航,而我们可能在执行 AJAX 调用后不希望出现这种情况。
  • @JanDvorak 以下问题,似乎是 OP 所期待的行为
  • 我不希望在响应我的 ajax 查询后加载我的页面,但我希望在加载我的页面时执行我的 ajax 查询。
  • @Florent06 那是不可能的。首先你的旧页面被卸载,之后它不能再做任何事情(包括 AJAX),然后新页面开始加载。也就是说,除非您通过 AJAX 进行页面加载(这需要额外的努力才能使浏览器历史记录正常工作)
  • @Florent06 那么这是不可能的。如果它适用于某些浏览器,则没有跨浏览器“规则”来处理类似的事情。无论如何,您正在寻找的行为没有多大意义,也不符合您当前使用的代码的行为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
相关资源
最近更新 更多