0

我遇到了一个奇怪的情况,即 jQuery $.getJSON/$.ajax call被普通的 JavaScriptwindow.location = 'http://new.com/'事件打断。

  1. 火灾事件

    window.location = 'http://example.com/something-that-takes-a-couple-seconds';
    
  2. 虽然上面的 URL 正在连接,但在浏览器实际重绘任何内容之前,$.getJSON请拨打电话。就我而言,我碰巧通过滚动到页面底部来触发此操作(加载更多结果)。
  3. 而不是真正去http://example.com/something-that-takes-a-couple-seconds,而是连接到 JSON URLhttp://example.com/ajax/getJSONList.php?params=...并查看纯文本 JSON 结果集。

以前有人有这个问题吗?

我想一个足够简单的解决方案就是在我触发window.location更改后立即以任何必要的方式阻止所有进一步的 javascript 执行?

编辑:您可以在此处查看实际代码:http: //myscubadives.com/,但涉水过不会特别有趣。

重现:首先,使用右上角的 Facebook 登录按钮。登录 Facebook,并允许我的网站访问。一旦 Facebook 位连接,以下行将运行:location.replace('/user/facebook'); - 我试过 location.replace()、location.href、window.location。同样的问题。

现在,当 '/user/facebook' 连接时,快速滚动到页面底部。这将触发 getJSON 调用。您将看到 RAW JSON,而不是点击“/user/facebook”。

如果没有人能以这种方式帮助我,我将尝试制作一个示例页面,并尽快删除所有其他内容。

4

1 回答 1

0

那么,不应该更改 window.location 强制浏览器连接并开始加载新页面,放弃所有 AJAX 调用的旧页面吗?

是的,刚刚检查过,更改了 window.location 上的任何属性,但哈希强制文档重新加载。所以我猜浏览器只是放弃所有当前的 AJAX 调用来加载一个新文档,这对于浏览器来说是非常合乎逻辑的。

至于如何解决这个问题,请在设置 window.location 后禁止所有 AJAX 调用。

于 2011-03-22T08:06:54.103 回答