2013-07-03 2 views
0

나는 jQuery에서 변수 범위를 완전히 파악하지 못했고 왜 "final_shasign"변수가 AJAX 내부에서 제대로 나오지만 선언되어 있음에도 불구하고 AJAX 외부에서 정의되지 않은 이유를 이해할 필요가 있다고 생각한다. AJAX 외부. 시간에 당신이 아약스 콜백 함수 외부 변수의 값을 읽으려고 있도록자바 스크립트 변수가 아약스를 통해 업데이트되지 않는다

var final_shasign; // initial declaration outside of ajax block below 

$.ajax({ 
    type: "POST", 
    url: "sha.php", 
    data: "amount="+amount+"&cn="+cn+"&currency="+currency+"&language="+language+"&orderid="+orderid+"&pspid="+pspid, 
    success: function(response_data, final_shasign){ 
     var parsed_data = $.parseJSON(response_data); 
     final_shasign = parsed_data.shasign; 
     console.log ("inside nested ajax: " + final_shasign); //comes out fine 
    } 
}); 

console.log ("outside of nested ajax: " + final_shasign); //comes out as undefined! 
+5

AJAX와 같은 시도 할 수 있습니다 비동기입니다 ...의 –

+0

중복 가능성 [AJAX를 호출의 응답을 반환하는 방법?] (http://stackoverflow.com/questions/14220321/ajax-call에서 응답하는 방법) –

답변

1

AJAX는 여전히 undefined의, 비동기입니다.

콜백 함수 내에서 변수 값을 사용하여 로직을 코딩하십시오. 여기서는 success 콜백입니다.

너무 추방 된 개체를 사용할 수 있습니다.

그것을 읽어 보시기 바랍니다 : AJAX와 문 당신의 console.log() 외부는 AJAX 응답이 반환 변수 값을 업데이트했습니다 전에 실행되고 있기 때문입니다 How do I return the response from an asynchronous call?

3

.

AJAX is asynchronous "sha.php"에서 응답이 반환되기 전에 AJAX 문 뒤에 코드가 실행됩니다.

비동기 적으로 작동하는 요청을 방지하려면 $.ajax() 메서드에서 async:false을 설정할 수 있습니다.

$.ajax({ 
    type: "POST", 
    url: "sha.php", 
    data: "amount="+amount+"&cn="+cn+"&currency="+currency+"&language="+language+"&orderid="+orderid+"&pspid="+pspid, 
    async: false, 
    success: function(response_data, final_shasign){ 
     var parsed_data = $.parseJSON(response_data); 
     final_shasign = parsed_data.shasign; 
     console.log ("inside nested ajax: " + final_shasign); //comes out fine 
    } 
}); 

But this isn't recommended!

대신 AJAX 응답에 의존 자바 스크립트는 success 콜백 함수를 호출한다.

var final_shasign; 

$.ajax({ 
    type: "POST", 
    url: "sha.php", 
    data: "amount="+amount+"&cn="+cn+"&currency="+currency+"&language="+language+"&orderid="+orderid+"&pspid="+pspid, 
    async: false, 
    success: function(response_data, final_shasign){ 
     var parsed_data = $.parseJSON(response_data); 
     final_shasign = parsed_data.shasign; 
     console.log ("inside nested ajax: " + final_shasign); //comes out fine 
     Func(); 
    } 
}); 

function Func(){ 
    console.log ("outside of nested ajax: " + final_shasign); 
} 
0

success: function(response_data, final_shasign){ 
    var parsed_data = $.parseJSON(response_data); 
    final_shasign = parsed_data.shasign; 

    passFinalvalue(final_shasign) 
    console.log ("inside nested ajax: " + final_shasign); //comes out fine 
} 

function passFinalvalue(getval) 
{ 
//do your stuff 
} 
관련 문제