2011-05-06 6 views
0
$('#wait').ajaxStart(function(){ 
$(this).css('background-position','0 -90px'); 
}); 
var result = $.ajax({ 
url: "file.php", 
async: false, 
data: ({id:id}), 
type: "post", 
cache: false 
}).responseText; 

#wait div에는 ok, error 및 wait 아이콘이있는 배경이 있고 Ajax 호출 별보다 먼저 div의 배경 위치를 변경하고 싶지만 작동하지 않습니다. ....ajax 호출이 시작되기 전에로드 메시지를 표시하는 방법은 무엇입니까?

+0

비동기 호출을 사용해 보셨습니까? 어쨌든 동기 호출은 피해야합니다. –

+0

비동기없이 서버에서 결과를 얻을 수 없다고 생각합니다. – Csabi

+0

물론 가능합니다. 그렇지 않으면 무엇이 그것의 의미일까요? 인수로 전달 된 응답으로 호출되는'success' 콜백을 설정해야합니다. jQuery 문서를 살펴 보자. 예제가있다. –

답변

1

, 그것은 다른 활동을 차단합니다. 이유가 확실하지 않아서 css 메서드가 즉시 완료 될 것으로 예상되기 때문에 확신하지 못합니다. 그러나 브라우저가 실제로 DOM을 업데이트 할 때의 구체적인 사항과 관련이 있습니다. 스레드가 완료됩니다.

일반적으로 비동기 요청을 사용하면이 문제를 완전히 피할 수 있습니다. UI가 완전히 비활성화되어 있기 때문에 Ajax 요청을 차단하면 부정적인 사용자 경험이 생길 수도 있습니다. 이 때문에 거의 항상 비동기 요청을 사용하는 것이 좋습니다. 페이지 요소를 사용할 수 없도록 설정해야하는 경우 (예 : 동기 요청을 효과적으로 시뮬레이션),이를 쉽게 수행 할 수있는 jquery 플러그인이 많이 있습니다. 나는 행운을 빌었습니다 : http://jquery.malsup.com/block/

+0

내 문제는 비동기를 true로 설정하면 responseText가 비어 있습니다. – Csabi

+0

같은 방식으로 작동하지 않습니다. 원래 질문에 대한 마지막 코멘트를보십시오. 'success' 옵션에 콜백을 연결해야합니다. 전혀 어렵지 않습니다. 비동기이기 때문에 다릅니다. 문서 http://api.jquery.com/jQuery.ajax/에는 페이지 아래쪽에있는 간단한 예가 있습니다. –

+0

감사합니다. – Csabi

0

beforeSend(jqXHR, settings)Function

사전 - 나는 ajaxStart의 funcion에서 뭔가를 경고하기 위해 시도하고 일했다, 그래서 나는 아약스는 배경 위치 변경을 기다리지 않습니다 어떤 이유에서 모르는 jqXHR (jQuery 1.4.x, XMLHTTPRequest) 객체가 전송되기 전에 수정할 수있는 요청 콜백 함수. 이것을 사용하여 사용자 정의 헤더 등을 설정합니다. jqXHR 및 설정 맵은 인수로 전달됩니다. 이것은 Ajax 이벤트입니다. beforeSend 함수에서 false를 반환하면 요청이 취소됩니다. jQuery 1.5에서 beforeSend 옵션은 요청 유형에 관계없이 호출됩니다.

0

대기 배경에 대해 beforeSend(jqXHR, settings) 기능을 시도 했습니까? 오류가있는 경우 error(jqXHR, textStatus, errorThrown), 요청이 성공하면 success(data, textStatus, jqXHR) 기능을 시도 했습니까? 귀하의 아약스 요청이 동기이며, 자바 스크립트가 단일 스레드이기 때문에

http://api.jquery.com/jQuery.ajax/

0

나는 데이터를 보내기 전에 jQuery 모바일에서 $ .obile.loading을 표시하려고하는 것과 동일한 문제가 있으며, 제 경우에는 동기화가 필요합니다. 일부 데이터는 다른 데이터보다 먼저 업로드해야합니다. 따라서 모든 비동기 인 경우 삽입이 발생하기 전에 일부 업데이트 레코드를 보낼 수 있습니다. 내 해결책은 ajax 호출을 중심으로 setTimeout에 올라가서 Ajax가 실행되기 전에로드 시간을 표시하도록했다. 그것을 할 Sucky 방법 그러나 그들이 나에게 $ .mobile.loading에 전화를 되돌릴 때까지 나는 그것을 사용하여 붙이게된다.

관련 문제