2011-09-28 2 views
2

jquery로 ajax 호출을 수행하는 동안 사용자에게 무슨 일이 일어나고 있는지 알 수 있도록 회전하는 gif 이미지를 제공하고 싶습니다. async : false를 사용해야합니다. 그렇지 않으면 코드가 혼란스러워서 잘못된 세션 변수로 끝나기 때문입니다. 여기에 (전화 화면을 동결했다 때까지 GIF를 표시하지 않습니다.) 내가 무엇을 가지고이 경우jquery async가 거짓 일 때 이미지로드

$('#status' + itemNum).html("<img width='14px' src='/style/images/spinner.gif'>"); 
if (foo == "bar") { 
$.ajax({ 
    type:"POST", 
    url: "foobar.html", 
    async:false, 
    data: "val1=" + escape(newValue) + "&val2=" + fieldName + "&val3=" + newValue2 
    }) 
} else { 
$.ajax({ 
    type:"POST", 
    url: "foobar.html", 
    data: "val1=" + escape(newValue) + "&val2=" + fieldName + "&val3=" + newValue3 
    }) 
    document.getElementById('status' + itemNum).innerHTML = "SAVED"; 
} 
$("#status" + itemNum).show(); 
setTimeout("fade_out('"+itemNum+"')", 1000); 
} 

난 단지 비동기 때 foo는 = 줄을합니다. 누구든지 왜 전화 후에 spinner.gif가로드되는지 알려주실 수 있습니까? 회 전자가 다른 곳에 있지 않고 로딩에 지연이 있기 때문에 생각할 수 있습니다.하지만 여러 번 호출 될 때 표시되지 않습니다 (그때까지 캐시에 있어야합니다). 그래서 나는 혼란 스럽습니다.

감사합니다.

+0

사악하고 고통스러운 SJAX 세계에 오신 것을 환영합니다. – SLaks

+0

또한 문자열을'setTimeout'에 전달하지 마십시오. – SLaks

+0

setTImeout에 문자열을 전달하는 것이 잘못된 이유는 무엇입니까? – oneadvent

답변

8

이것은 불가능합니다.
자바 스크립트가 UI 스레드에서 실행되므로 async: false은 모든 애니메이션을 포함하여 브라우저를 고정시킵니다.


하지 사용 async: false를 수행합니다!

비동기 요청을 처리하려면 코드를 수정해야합니다.

+0

:) 찾지 못했습니다. 어쨌든 누군가가 버튼을 계속 클릭하는 것을 막을 수 있습니까? 통화가 진행되는 동안에도 사용을 중지하고 싶습니다. – oneadvent

+2

예; 버튼을 비활성화하십시오. – SLaks

+0

그 이유는 그게 내가했던 것인데, 버튼을 비활성화하고 다시 사용하기 위해 onsuccess를 사용하기 때문이다. – oneadvent

3

async: false은 브라우저를 잠궈 모든 애니메이션이 처리가 계속 될 때까지 일시 중지됩니다. 그러나 ajax 호출 전에 적어도 1 초 이상 지연이있는 setTimeout 안에 ayax 호출을 배치하여 그래픽을 표시 할 수 있습니다. 애니메이션 GIF인데도 여전히 움직이지 않을 것입니다. 물론


은 위의 단지 미봉책이다, 더 나은 솔루션은 async: false을 사용하지하는 것입니다.

+0

이 아약스 호출을하는 동안 움직이는 gif를 보여주고 나중에 사라지게하는 옵션이있다. – oneadvent

+0

예, async : false' 대신에'async : true'를 사용하고 있다면. –

관련 문제