我需要生成一个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");
}
});
}

答案 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,这是未定义的,因为它没有返回任何内容。
这也意味着您在检查文件是否正在生成之前并未实际等待。