我希望在发送主要请求之后,在我收到完整回复之前,在远程php中回显数据。
意图是显示"我几乎在那里 - 剩下5件物品"或者是similer ......
这是我目前的js脚本:
function getdetails(){
$("div#urltable").fadeOut('fast');
$("div#ajaxLoading").fadeIn('fast');
var checkurl = $('input#remoteurl').attr('value');
if($("#checkBrokenLinks").prop('checked') == true){
var checkonline = 'check';
}
else {
var checkonline = 'skip';
}
$.ajax({
type: "POST",
url: "ajax-outlink_checker.php",
data: {checkurl:checkurl, checkonline: checkonline}
}).always(function(data) {
var $response = $(data);
var whileRuningCount = $response.filter('#whileRuningCount').html();
$("div#whileRuningCount").fadeOut('fast');
$("div#whileRuningCount").fadeIn('fast');
$("div#whileRuningCount").html(whileRuningCount);
}).done(function(result) {
var $response=$(result);
var urltable = $response.filter('#urltable').html();
var whileRuningCount = $response.filter('#whileRuningCount').html();
$("div#ajaxLoading").fadeOut('fast');
$("div#urltable").fadeIn('fast');
$("div#urltable").html(urltable);
});
}
正如您所见 我添加.always()试图抓住回声&#php文件中的运行。 但是...我想我很想念如何使它工作,如果.always 甚至可以解决这个问题。
任何帮助都是最常见的。 最诚挚的问候,Sagive。
答案 0 :(得分:1)
.always()
不适用于此。这只是意味着请求是success/done()
还是fail()
运行该代码段中的内容。
如果您尝试显示“几乎在那里......”消息,更好的方法是让另一个async call
到server
每隔N秒轮询一次,查看一些数据状态服务器,(一个标志可能?)并基于它在前端显示一条消息..
答案 1 :(得分:1)
您需要进行2次单独的ajax调用。 1表示初始请求,然后根据需要重复第二个请求以检查状态更新。动作响应者需要更新一些变量以供状态响应者检查。如何将状态传达给其他响应者取决于您。一种方法是简单地使用文件。您的操作响应者将致电handleaction()
,而状态响应者只会致电statuscheck()
:
<?php
function handleaction()
{
$actions_left = 0;
while ($actions_left > 0)
{
perform_action();
status_update(--$actions_left);
}
}
function status_update($remaining)
{
$filename = "/" . session_id() . "_action_status.txt";
$fh = fopen($filename, "w");
fputs($fh, $remaining);
fclose($fh);
}
function statuscheck()
{
$filename = "/" . session_id() . "_action_status.txt";
echo @file_get_contents($filename); // js treats empty response as 0.
}
?>