使用setInterval

时间:2018-01-21 17:35:09

标签: javascript jquery ajax

我需要生成一个XML文件,然后检查文件是否存在。 XML文件很大,创建需要时间。所以我想我使用了一个间隔并检查文件是否存在。

但我只获得无限循环,尽管该文件已在浏览器控制台中创建或有时为 404(theXmlfile.xml),但一切都会停止。



var tid;
  
jQuery("#cxml").click(function(){
	exeXml();		
	tid = setInterval(getAjax("theXmlfile.xml"),30000);		
	});
  
function exeXml(){ //The php file creates the XML file, this need some time
	var xmlhttp = new XMLHttpRequest();			
	xmlhttp.open("GET", "CreateXML.php", true);
	xmlhttp.send(); 		
	}	
  
 function getAjax(TheURL) {
	  jQuery.ajax({
	       url: TheURL,
	       type:'HEAD',   
	       error: function() {
     		 	//error code
      			//alert("File not successfully created");
			clearInterval(tid);
			tid = setInterval(getAjax("theXmlfile.xml"),30000);	              
		},
	       success: function(response) {
			// exists code 			
			clearInterval(tid);
                	alert("File successfully created");
		}
	  });
	}




1 个答案:

答案 0 :(得分:1)

setInterval将函数作为第一个参数,调用函数并传递函数不是一回事。

tid = setInterval(function(){  // anonymous function passed to settimeout
    getAjax("theXmlfile.xml");
},30000);   

tid = setInterval(getAjax("theXmlfile.xml"),30000); // calling a function

在上面的代码中,您实际上是将getAjax的返回值传递给setTimeout,这是未定义的,因为它没有返回任何内容。
这也意味着您在检查文件是否正在生成之前并未实际等待。