2013-09-04 4 views
3

브라우저가 Ajax 요청을 완전히 보낸 후 내 기능 : myFunc1jquery에 어떻게 호출 할 수 있습니까?ajax 요청을 보낸 후 함수를 호출하는 방법?

jquery ajax가 으로 전송 된 후 콜백 함수를 실행하고 싶습니다. 요청을 완료하기를 기다리지 않기 때문에 complete 또는 success에서이 작업을 수행하고 싶지 않습니다. 아약스 요청이 브라우저에서 전송 된 직후에 실행하고 싶습니다.

내가 아약스 요청을 한 후 함수를 실행하려면 :

이 내가이 필요하는 사용 사례입니다. `myFunc1()는 브라우저의 위치를 ​​변경하면 브라우저가 보류중인 아약스 요청을 취소 할 것, 경우

$.ajax({url: 'x.html'}); 
    myFunc1(); 

: 내 원래의 코드는이이었다.

나의 현재 솔루션은이 작업을 수행하는 것입니다 : 이것은 아약스가 완료 될 때까지 myFunc1가 호출되지 않습니다 있는지 확인합니다

$.ajax({url: 'x.html', complete: myFunc1}); 

. 이 솔루션이 작동하더라도 요청이 완료 될 때까지 myFunc1이 실행되지 않으므로 비효율적입니다. 아약스 요청이 무엇을 리턴하는지에 상관하지 않기 때문에 실패 했건 성공하든, myFunc1 함수를 실행하기 위해 완료 될 때까지 기다릴 필요가 없습니다.

+1

콜백에 관심이 없다면 아약스 호출과 동시에 'myFunc1'을 실행하십시오. –

답변

0

는 AJAX 호출이 브라우저가 취소되지 않도록 만들어지고 resquest을 완료하기 위해 서버 기다릴 필요없이 된 후 나는 충분히 내 콜백 함수를 실행 한 것입니다

시간 초과로 인해 내 서버가 100ms으로 다시 연결되지 않으면 callback이 실행됩니다. 100ms도 브라우저가 요청을 보내는 데 충분한 시간입니다.

상태 코드를 실험 한 결과 결국 사용하지 못했습니다. 신뢰할 수없는 크로스 브라우저와 JSONP 요청이 누락 된 것으로 나타났습니다.

0

당신이 사양을 보면 : 당신은 2 헤더가 이미 반환 된 의미 볼 수 있습니다

http://www.w3.org/TR/XMLHttpRequest/

.

const unsigned short **HEADERS_RECEIVED** = 2; 

이것은 본질적으로 jqXHR 성공과 같습니다. 다를 수 있습니다 브라우저 =)

더 심각가 달라집니다 .. 다른 이유 JQuery와 그들 모두를 지원하지 않고 할 수없는 추상 그들에게 선택 :

http://msdn.microsoft.com/library/ie/ms534361.aspx

https://developer.mozilla.org/en-US/docs/Web/API/document.readyState

(모를 수가 크롬에 대한 신뢰할 수있는 소스 찾기)

+0

글쎄, 요청이 브라우저에서'보낸'후,'readystate = 2'가 아닌 이벤트를 원합니다. 나는 그것을 반영하기 위해 나의 질문을 업데이트했다. – user566245

+0

기본적으로 모든 브라우저에서이 작업을 수행 할 방법이 없다고 말하고 있습니다. 예를 들어 모질라는 사양에 따라 적재 및 완료 만합니다. jQuery는 브라우저가 제공하는 이벤트 및 데이터에 관해서는 가장 낮은 공통 분모로만 작용할 수 있습니다. 그들이 제공하는 이벤트는 지속적으로 수집 할 수있는 유일한 이벤트입니다. http://jsfiddle.net/KpXBP/1/ 그들 모두가 나타납니다, 아마 내가 더 많은 시간을 가졌다면 실제로 발포 할 때 알아낼 수 있습니다. 어떤 것은 BS 일 수도 있습니다. – Scott

-1

아약스 호출이 성공하는지 상관하지 않는다면 settimeout 메소드를 사용해 볼 수 있으며 요청을 얼마나 오래해야하는지 평가할 수 있습니다. 케. 추정하기 전에 실제로 완료 될 경우를 대비하여 완료 방법을 사용할 수도 있습니다. 그것은 일종의 해킹이나, 그것은 당신을 위해 일할 수도 있습니다. 예를 들어 코드는 다음과 같습니다.

$.ajax({url: 'x.html', complete: myFunc1}); 
setTimeout(myFunc1,100); 
-1

beforeSend 옵션을 사용하고 싶습니다.

당신이 기능은 AJAX 요청의 시작에 발사 할 것처럼 http://api.jquery.com/jQuery.ajax/

+1

OP는 요청이 전송 된 후 콜백 *을 명시 적으로 요청합니다. – sznowicki

0

실제로 소리를 참조하십시오.

var cb = function(){ 
    window.document.location.href="http://google.com"; 
    } 

    $.ajax({ 
    url: 'x.html', 
    complete: cb, 
    timeout: 100 
    }); 
:
$("#btn-ajax").ajaxStart(myFunc1); 

function myFunc1() { 
    $("#message").html("I don't really care if the ajax call succeeds."); 
} 
관련 문제