2014-11-21 4 views
0

나는 occasion에서 실행하는데 10-30 초가 걸릴 수있는 ajax 스크립트를 가지고있다. PHP 파일을 실행하는 동안 PHP 스크립트는 세션 매개 변수를 다른 상태로 설정합니다. 이 배후의 아이디어는 현재 워크 플로우를 업데이트하기 위해 두 번째 아약스가 첫 번째와 비동기로 실행되도록하는 것입니다. ajax가 실행 중일 때 폴링 스크립트 설정하기

이 ajaxStart와 ajaxStop으로 다음 내가 사용하고이 작업을 수행하려면

function getScriptState(){ 
    $.ajax({ 
     url : "/modules/core.iris/ajax/getState.ajax.php", 
     type : "GET", 
     dataType : "json", 
     async : true, 
     global: false, 
     success : function (d){ 
      if($('#statusMsg').length !== 0){ 
       if(typeof d.statusMsg !== "undefined"){ 
        $('#statusMsg').html(d.statusMsg); 
       } 
      } 
     } 
    }); 
} 
function clearScriptState(){ 
    $.ajax({ 
     url : "/modules/core.iris/ajax/clearState.ajax.php", 
     ... 
    }); 
} 
var loaderMsg = null; 
$(document).ajaxStart(function() { 
    getScriptState(); 
    loaderMsg = setInterval(getScriptState, 500); 
}); 
$(document).ajaxStop(function() { 
    clearScriptState(); 
    clearInterval(loaderMsg); 
}); 

다음과 같이 longrunning PHP 스크립트를 호출하는 스크립트는 다음과 같습니다 문제는

$.ajax({ 
    url : "/modules/core.wages/ajax/wagesLines.ajax.php", 
    async : true, 
    type : "POST", 
    data: weeks, 
    dataType: "json", 
    success : function(d){ 
    .... 

, 즉 getScriptState() 실제로 위의 스크립트와 비동기로 실행되지 않습니다. longrunning ajax 호출이 끝나기 전에 실제로 밀리 초까지 상태를 반환하지 않습니다.

내 콘솔 로그가 끝나면 스크립트가 오래 걸리기 전에 두 번 실행 된 것처럼 보입니다. 그러나 DOM에 반영되지 않습니다.

다음은 Chrome의 네트워크 타임 라인 사진입니다. getState가 한 번 호출되면 wageLines.ajax.php의 결과가 실행되고 getState가 여러 번 다시 실행됩니다. 이 데이터를 가져 오는 완료되지 이후 그 여러 번 wageLines.ajax.php 전에 수 가리키고한다 :

이 스크린 샷에 나타낸 바와 같이

enter image description here

, 문제는 그 getState.ajax에 대한 호출의 모든. phages는 wagesLines.ajax.php가 완료 될 때까지 실행됩니다. 따라서 getState.ajax.php가 실행하는 데 100ms 밖에 걸리지 않아도 wagesLines.ajax.php가 끝날 때까지 완료되지 않습니다.

누구나 아이디어가 있습니까?

+1

긴 요청이 완료된 후 폴링 요청이 대기하고 실행되도록 아마도 서버에 대한 연결 수가 제한되어? – derMrich

+0

상태 테스트 결과를 확인 했습니까? – Pointy

+0

그들은 모두 { "statusMsg": "임금 선을 가져 오는 중"}을 반환합니다. clearState.ajax.php가 실행될 때까지. 또한 @derMrich 내 서버가 여러 연결을 허용하도록 구성되어 있습니다. 또한 위의 스크린 샷에서 볼 수 있듯이 여러 파일이 동시에 실행되고 있습니다. –

답변

관련 문제