Jquery / Ajax .load()随机不起作用?

时间:2013-08-27 23:58:56

标签: php jquery ajax

我一直在使用Jquery .load函数从php文件中请求元素并将其显示在页面上。起初我只需要first.php中的元素,并且所有内容都是完全加载的。然后我创建了第二个函数来从second.php请求元素,这导致first.php中的元素有时不加载(first.php应该总是显示元素),而second.php每次都加载。出于某种原因,加载first.php然后返回此文件会使其再次正确加载。

attempts = 0;


$(document).ready(function(){
roll_info();
past_rolls();
});

function roll_info(){
   $("#info").load("first.php", timer);
   //to see how many times the function is called 
   attempts++;
 }); 
}

function past_rolls(){
  $("#prevRolls").load("second.php");
}

//called after roll_info()
function timer(){
 //If the element requested by the ajax isn't added to the page it attempts to add again
 if (!document.getElementById("roll_info"))
 {
 roll_info();
 }

 //Refreshes roll_info() every 10 seconds if loaded successfully until no longer waiting
 else if (document.getElementById("status").innerHTML == "Status: Waiting..."){
   nextRefresh = setInterval(function(){
      roll_info();
      clearInterval(nextRefresh);
      return;},10000);
 }
 //other code

在控制台中查看“尝试”的值会在加载后立即显示1000+,这意味着它通过ajax发出了数千个失败的请求?控制台中也没有可见的错误。

知道导致这种不一致的原因是什么吗?

1 个答案:

答案 0 :(得分:1)

如果您想知道何时加载 first.php second.php ,请向.load提供回调函数。

来自jQuery api网站的示例:

$('#result').load('ajax/test.html', function() {
  alert('Load was performed.');
});

只需用first / second.php替换ajax / test.html。

顺便说一句,您不应该使用setInterval来检查文件是否已加载。