远程php运行时的Ajax响应

时间:2013-04-30 16:16:41

标签: php ajax triggers

我希望在发送主要请求之后,在我收到完整回复之前,在远程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。

2 个答案:

答案 0 :(得分:1)

.always()不适用于此。这只是意味着请求是success/done()还是fail()运行该代码段中的内容。

如果您尝试显示“几乎在那里......”消息,更好的方法是让另一个async callserver每隔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.
}
?>