2014-09-26 4 views
0

동기화 일부 서비스에 대한 ajax 호출이 있습니다.AJAX 호출 블록 대화 상자가 표시됩니다.

내가 먼저 대화 표시하고 싶습니다 (내 경우에는 그것이 에 extjs 창입니다 ...하지만 그게 포인트 옆에있다. 같은 문제는 간단한 경고 (..)로 발생).

대화 상자를 표시 한 직후에 완료하는 데 약 30 초가 걸리는 아약스 전화를 부르고 싶습니다. 그러나 대화 상자는 ajax 호출이 완료 될 때까지 (즉, 30 초 내에) 표시됩니다. 나는 심지어 그것을 타임 아웃에 넣으려고했지만, 아무 것도 바뀌지 않는다.

Util.logInfo('1. before popup') 

setTimeout(function(){alert("Hello")},1000); //some kind of GUI action 

Util.logInfo('2. after popup') 

var self = this; 

var call = {} 

call.url = url; 
call.xmlHttpReq = $.ajax({ 
    url: 'somewebserviceURLthattakesaloooongtime', 
    dataType: 'json', 
    async: false, 
    type: 'GET' 
}).always(function (processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) { 
    self.data = processedDataOrXHRWrapper; 
}); 

Util.logInfo('3. after ajax') 

이 JQuery와 AJAX 기능에 특별한 문제인가, 아니면 내가 어떻게 아약스 작품에 대한 근본적인 뭔가 를 놓친 거지?

Java 백그라운드에서 오는 것은 마치 이벤트 발송 스레드 활동이 진행중인 것과 같습니다. 당신의 아약스가

를 완료 할 때까지 실행 더 스크립트를 방지 (또는 전체 웹 사이트를 잠글)합니다 async: false 설정

답변

1

What does "async: false" do in jQuery.ajax()?

From the documentation

[...] 기본적으로 여기에서 자세한 내용을 참조하십시오 모든 요청은 비동기 적으로 으로 전송됩니다 (즉, 기본적으로 true로 설정 됨). 동기화 요청이 인 경우이 옵션을 false로 설정하십시오. 교차 도메인 요청 및 dataType : "jsonp"요청은 동기 작업을 지원하지 않습니다. 동기 요청은 일시적으로 브라우저를 잠글 수 있으며, 요청이 활성화되어있는 동안 모든 작업을 비활성화 할 수 있습니다. [...]

단순히 해당 행을 제거하면 문제가 해결됩니다.

+0

예, 고정되었지만 비동기가 아닌 동기화를 실행하고 싶습니다. 통화 후 다른 팝업을 표시하면 즉시 표시됩니다. 두 대화 상자 사이에 일시 중지가 필요합니다. –

관련 문제