2013-04-30 1 views
0

Я хочу получить данные, отобранные на удаленном php после того, как я отправил основной запрос и до того, как получу полный ответ.Ответ Ajax при удаленных 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 - это даже путь.

Любая помощь была бы наиболее apreaciated. С уважением, Sagive.

ответ

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. 
} 
?> 
+0

спасибо за усилие ... я сделаю это так, чтобы его не преподобный путь. –

1

.always() нет для этого. Это просто означает, что запрос был success/done() или fail() запустите то, что находится в этом фрагменте.

Если вы пытаетесь показать сообщение «почти там ..», лучший способ состоял бы в следующем: async call - server, который проверяет каждые N секунд, просматривает состояние данных на сервере (возможно, флаг ?) и на основе этого показывает сообщение на лицевой стороне.

+0

спасибо за effor мат. –

Смежные вопросы