Firefox 3.0中的无限刷新循环

时间:2010-05-26 05:11:49

标签: javascript jquery ajax firefox xmlhttprequest

我的Firefox 3.0.x中的Javascript出现了一个奇怪的问题。在Firefox 3.0.12中,只要加载列表主体,页面就会不断重新加载。 Firefox 3.5,Safari 4和Chrome 5(都在Mac上)都没有遇到此问题。

编辑:我创建了一个孤立的示例,而不是从我现有的代码中提取它。

此问题与在将FF. 3.0设置为空字符串时导致页面重新加载的错误有关。

test.js

function welcomeIndexOnLoad() {
  $("#options a").live('click', function () {
    optionClicked($(this), "get_list_body.html");
    return false;
  });

  $(document).ready(function() {
    optionClicked(null, "get_list_body.html");
  });
}

function optionClicked(sender, URL) {
  queryString = "";
  if (sender != null) {
    queryString = $(sender).attr("rel");
  }
  $("#list_body").load(URL + "?" + queryString, function(resp, status, AJAXReq) {
    console.log(resp);
    console.log("" + status);
    location.hash = queryString;
  });
}​

的test.html

<html>
<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
  <script type="text/javascript" src="test.js"></script>
  <script>
    welcomeIndexOnLoad();
  </script>
</head>

<body>
<div id="container">
  Outside of list body.
  <div id="list_body">
  </div>
</div>
</body>
</html>

get_list_body.html

<h3>
  <div id="options">
    <a href="#" rel="change_list">Change List</a>
  </div>
<ul>
  <li>li</li>
</ul>

jQuery line 5252(xhr.send()调用)在页面重新加载后立即显示在控制台中:

xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );

2 个答案:

答案 0 :(得分:3)

经过更多的搜索,我遇到了这个blog post,它提到在Firefox 3.0中将位置哈希设置为空字符串会导致页面刷新。

将我的默认queryString更改为“#”而不是空字符串可以解决问题。

答案 1 :(得分:0)

最有可能是实时函数,因为它有一个常量流,在调用die()函数之前永远不会结束。尝试使用die().live(...)

进行测试

虽然有时它看起来像刷新可能不是这种情况,但可能只是因为浏览器处理内存很糟糕而且循环可能会耗尽内存泄漏。

另一个原因可能是您的ajax页面加载了很多次。