0

我希望在发送主请求之后和获得完整响应之前在远程 php 中回显数据。

目的是显示“我快到了 - 还剩 5 件”或类似的东西......

这是我当前的 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 甚至是解决它的方法。

任何帮助都会非常受欢迎。最好的问候,萨吉夫。

4

2 回答 2

1

.always()不是为了那个。它只是意味着请求是success/done()fail()运行该片段中的内容。

如果您试图显示“几乎就在那里..”消息,更好的方法是让另一个async callserverN 秒轮询一次,查看服务器中的某些数据状态,(可能是一个标志?)并基于此在前端显示一条消息..

于 2013-04-30T16:26:33.447 回答
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.
}
?>
于 2013-04-30T16:52:39.730 回答