2013-01-10 7 views
0

가능한 중복은 :
jQuery global variable problemAJAX 요청 변수 문제

는 내가 jQuery를 AJAX 호출을하고있어 내가 변수 응답에 저장합니다. 그러나이 변수는 AJAX 호출 함수 외부의 응답 값을 갖고 있지 않습니다. AJAX 호출 함수 외부에서 어떻게 응답을 얻을 수 있습니까?

예 : AJAX 기능을하기 전에 설정 한

var responseText = ''; 
$.ajax({ 
    url: 'clients_handler.php', 
    type: 'post', 
    data: { action: 'check_email', email: email }, 
    success: function(data) { 
     responseText = jQuery.parseJSON(data); 
    } 
}); 
console.log(responseText); 

그래서 내 예에서 responseText가 비어 있습니다. 어떻게이 변수를 AJAX 응답 값으로 설정할 수 있습니까?

+2

이 질문에 요구됩니다 모든 시간을 ... –

+0

당신이에서 왔어요 곳 모두에서 가장 부유 한 사람이 될 것입니다 : jQuery를이 jqxhr를 구현 이연 만들만큼 충분히 좋은했다! –

+0

동시성 문제 (요소가 DOM에 있기 전에 이벤트 첨부 파일을 호출)를 계산하면 두 배가됩니다. –

답변

0

간단히 대답하면 ajax는 비동기 적으로 발생합니다. 기본적으로 이것은 아약스 코드가 완료 될 때를 알지 못하므로 어떤 코드 라인 이후에 $.ajax이 호출 될 때을 호출하면 $.ajax 완료 전에 실행될 수 있습니다 (반드시 그런 것은 아닙니다). 이것은 입니다. 왜 아약스에 대한 콜백이 필요합니다.

하나의 해결 방법은 jQuery.ajax 옵션 async: false을 사용하여 ajax 요청을 동기시키는 것입니다.하지만 이는 바람직하지 않습니다.

진정한 해결책은 콜백을 적절하게 사용하는 것입니다. success: 함수 내에서 responseText으로 필요한 모든 작업을 수행하십시오.

한 곳에서 모든 코드를 갖고 싶지 않으십니까? 나는 £ 1를 가지고 있다면

var jqxhr = $.ajax({url: url, data: data}); 
//thousands of lines of code here 
$.when(jqxhr).done(function (responseText) { console.log(responseText); }); 
1

클로저 내에 있기 때문에 원하는 방식으로 변수를 저장할 수 없습니다. 가장 좋은 방법은 요청이 완료된 후에 실행될 함수에 응답 데이터를 전달하는 것입니다. 다음은 그 예입니다.

//code 
$.ajax({ 
    url: 'clients_handler.php', 
    type: 'post', 
    data: { action: 'check_email', email: email }, 
    success: function(data) { 
     responseHandler(data); 
    } 
}); 


function responseHandler(data){ 
    console.log(data); 
} 
+0

이것은'success : responseHandler'로도 쓰여질 수 있습니다. –

+0

예, $ .ajax 밖에있는 코드를 원하지만 이유를 모르겠습니다. – user1966829