我向PHP脚本发出一个AJAX请求,该脚本从更改的文本文件中返回一个数字。这个AJAX请求应该每3秒发生一次。但是,AJAX请求只进行一次并且它不返回任何内容,并且firebug显示仍在进行AJAX GET请求。几分钟后它返回并产生一个数字。它应该已经进行了多次调用,但它只进行了一次,它只是回来了最终答案。我正在努力弄清楚这是怎么发生的!? :(
//this is called first which calls getStatus which should get the progres of the
//conversion. This AJAX request takes a long time to come back which may hinder the
//getStatus coming back quickly maybe?
function convertNow(validURL){
startTime = setTimeout('getStatus();', 6000);
$.ajax({
type: "GET",
url: "main.php",
data: 'url=' + validURL + '&filename=' + fileNameTxt,
success: function(msg){
}//function
});//ajax
}//function convertNow
function getStatus(){
$.ajax({
type: "POST",
url: "fileReader.php",
data: 'textFile=' + fileNameTxt,
success: function(respomse){
textFileResponse = respomse.split(" ");
$("#done").html("Downloading" + textFileResponse[0]);
if(textFileResponse[0]=='100.0%'){
$("#loading").hide("slow");
$("#done").html("Complete");
return;
}
continueTime = setTimeout('getStatus();', 3000);
}
});//ajax
}
第二个JavaScript函数调用的PHP脚本是:
$fileName = $_POST['textFile'];
//calls an external script to get the text file output
$result = file_get_contents($_SESSION['serverURL']."fileReader.php?textFile=$fileName");
echo $result;
以上是否正确,我的逻辑是否在上面捕获?或者上述意味着只会发出一个AJAX请求?
这个问题与another question有关。我之前认为的PHP脚本很慢。我希望这个问题现在与JavaScript有关。
谢谢大家的帮助。
答案 0 :(得分:1)
我不确定你能否做到
setTimeout("getStatus();",3000);
但我知道你可以做到
setTimeout(getstatus,3000);
我不确定你遇到的是什么慢,但我会尝试将警报放入:在ajax之前,并且在成功时,打印到php中的日志(可能的开始和结束),并提醒设置continueTimeout时的javascript,甚至可能在超时触发时发出警报...... 像:
function getStatus(){
alert('getStatus Started');
$.ajax({
type: "POST",
url: "fileReader.php",
data: 'textFile=' + fileNameTxt,
success: function(respomse){
alert('ajax success');
textFileResponse = respomse.split(" ");
$("#done").html("Downloading" + textFileResponse[0]);
if(textFileResponse[0]=='100.0%'){
$("#loading").hide("slow");
$("#done").html("Complete");
return;
}
alert('starting continuetime');
continueTime = setTimeout(**getStatus**, 3000);
}
});//ajax
}
答案 1 :(得分:1)
您最好使用setInterval而不是setTimeout
在使用新变量时也不要忘记“var”。
如果传递的参数是正确的并且ajax请求仍然没有返回任何内容,那么罪魁祸首就是服务器端。
答案 2 :(得分:1)
我想知道这个代码什么时候才能起作用。让我们说在Javascript中实现与此类似的东西的整个想法是值得怀疑的。首先,因为您根本没有JavaScript中的任何同步技术,但在您的代码中,您依赖于代码的特定执行顺序,而99%的情况并非如此。通过设置:
setTimeout( "getStatus", 6000);
你创建了一种并发,因此你可以先执行第二个脚本,虽然你把它推迟了,但是两个请求可以同时到达服务器,所以第二个脚本可能不会返回任何东西,所以成功功能将不再执行。
我给你的热门建议考虑重新设计你的应用程序,因为问题根本不在Javascript部分。
$.ajax({
type: "POST",
url: "fileReader.php",
data: { param1: value1, param2:value2...etc},
success: function(respomse){ ...}});
PS。响应花费大量时间返回的事实指向服务器端的问题,而不是Javascript中的代码。如果我们开始谈论日志记录并且您已经提到过firebug,您可以使用console.log(“msg”)登录firebug控制台消息。
答案 3 :(得分:0)
fileReader.php
是否在无限循环中调用自己?
当然听起来像。通过查看那里的小代码片段,它看起来确实如此。 (那是整个代码吗?)
如果是fileReader.php
,那么它可能会为每个客户端进行与Web服务器允许的调用次数相同的数量,然后将其置于保持状态,这就解释了为什么您没有收到堆栈溢出错误。当ajax超时(60秒后或其他任何时间)时,整个fileReader.php
调用堆栈就会消失,而你将得到第一个ajax的答案。或者也许你留下了第一个fileReader
- 电话的答案。呃不确定。
也许尝试添加
if(!isset($_POST['textFile'])){echo "ERR: POST['textfile'] not set!"; exit(-1);}
在您显示的fileReader.php
- 文件中的部分之前