나는 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 전에 수 가리키고한다 :
이 스크린 샷에 나타낸 바와 같이, 문제는 그 getState.ajax에 대한 호출의 모든. phages는 wagesLines.ajax.php가 완료 될 때까지 실행됩니다. 따라서 getState.ajax.php가 실행하는 데 100ms 밖에 걸리지 않아도 wagesLines.ajax.php가 끝날 때까지 완료되지 않습니다.
누구나 아이디어가 있습니까?
긴 요청이 완료된 후 폴링 요청이 대기하고 실행되도록 아마도 서버에 대한 연결 수가 제한되어? – derMrich
상태 테스트 결과를 확인 했습니까? – Pointy
그들은 모두 { "statusMsg": "임금 선을 가져 오는 중"}을 반환합니다. clearState.ajax.php가 실행될 때까지. 또한 @derMrich 내 서버가 여러 연결을 허용하도록 구성되어 있습니다. 또한 위의 스크린 샷에서 볼 수 있듯이 여러 파일이 동시에 실행되고 있습니다. –