2010-05-19 6 views
0

jQuery 콜백 함수가 있습니다. 그 함수에서는 더 높은 범위에있는 변수의 값을 변경하려고하지만 어떤 이유로 그것이 그렇게하지 않습니다. 여기 코드는 다음과 같습니다jQuery가 콜백에서 상위 범위의 객체를 설정하지 않습니다.

function add() { 
    var returnedData = { 
     my_id: 0 
    }; 

    $.post("add_event.php", { event : toSendText }, function(data) { 
     returnedData.my_id = 5; 
    }, "json"); 

    if(add_page == true){ 
     alert(returnedData.my_id); 
     window.open('content-list.php?cal_id='); 
    } 
} 

답변

2

문제는 returnedData.my_id = 5;alert()가 (요청이 완료되면 데이터가 나중에 어떤 시점에서 다시 서버에서 제공)하지 후 발생 있도록 $.post()는, 비동기 것입니다.

function add() { 
    $.post("add_event.php", { event : toSendText }, function(data) { 
    if(data.add_page == true) { 
     //use data in some way here presumably 
     window.open('content-list.php?cal_id=' + data.id); //maybe this? 
    } 
    }, "json"); 
} 
0
jQuery.ajax(settings) 

비동기부울 기본 : 당신이 원하는 것처럼

이 일을하려면, 당신은 당신의 데이터는 다음과 같이 사용할 수있게되면 콜백에서 작업을 계속해야합니다 : true

기본적으로 모든 요청은 비동기 (즉, 기본값은 true로 설정됩니다. ). 동기 요청이 필요한 경우이 옵션을 false로 설정하십시오. 도메인 간 요청 및 데이터 유형 : "jsonp"요청은 동기 작업을 지원하지 않습니다. 동기 요청은 일시적으로 브라우저를 잠글 수 있으며 요청이 활성화되어있는 동안 동작을 비활성화 할 수 있습니다.

:

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

기본적으로 jQuery.post(settings)이 매개 변수를 전달하지 않습니다 async 그래서이에 해당하는 속기 아약스 기능, 이 true

가정

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success 
    dataType: dataType 
}); 

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

관련 문제