비동기식 아약스 호출이 작동하는 방법에 대한 입문서가 필요합니다.
$.post()
에 전화하면 네트워킹 호출이 시작되어 $.post()
호출에서 즉시 반환되고 나머지 자바 스크립트가 계속 실행됩니다. 즉시 기능을 종료 할 것입니다 get_users()
.
그러나 ajax 호출은 아직 완료되지 않았습니다. 아직 진행 중입니다. 잠시 후 ajax 호출이 끝나고 function(response) {...}
으로 정의 된 ajax 호출의 성공 처리기가 호출됩니다. 그런 다음에 만 나중에 아약스 호출의 응답 값을 알 수 있습니다.
이것은 비동기식 아약스가 의미하는 것입니다. get_users()와 같은 호출을 작성하여 사용자를 확보하고 리턴 할 수는 없습니다. 대신, 나중에 (Ajax가 완료되었을 때) 호출되고 콜백 함수를 사용하여 코드의 경로를 계속 진행할 수 있어야합니다. 예,이 작업은 불편합니다. 그러나 비동기식 아약스 호출을 사용하는 자바 스크립트에서 작업하는 방식입니다. 비동기식 아약스 호출의 이점은 아약스 호출이 진행되는 동안 브라우저와 다른 자바 스크립트 코드가 완전히 살아있을 수 있다는 것입니다. 비동기 아약스 호출의 비용은 이들을 코딩하는 것이 더 복잡하다는 것입니다.
이 복잡한 문제를 처리하는 방법에는 여러 가지 선택 사항이 있습니다. 먼저 get_users() 호출을 수행 한 다음 get_users()
내부 콜백에서 수행하려는 프로그래밍 시퀀스를 계속 수행 할 수 있습니다. 그 응답 시퀀스는 응답 (실제 사용자)을 알 수있는 유일한 장소이기 때문입니다.코드에서 한 곳에서 get_users()
만 사용하는 경우 제대로 작동 할 수 있습니다. 그것은 다음과 같이 보일 것이다 : 당신이 다른 목적을 위해 여러 다른 장소에서 get_users()
를 사용해야하는 경우
function get_users() {
$.post(
url_base + 'travel/trip/get_users/' + trip_id,
function(response) {
// process the user list here and continue whatever other code you
// need that deals with the user list
},
'json'
);
}
는, 당신은 그냥 콜백을 호출 후 호출을 콜백 자체를 가지고 수 있도록 변경할 수 있습니다 때 AJAX 호출 수행. 그런 다음 해당 콜백 함수에 응답하여 처리를 완료합니다 :
function get_users(callback) {
$.post(
url_base + 'travel/trip/get_users/' + trip_id,
callback,
'json'
);
}
을이 두 번째 옵션에서이 같은 get_users()
를 호출 할 수 있습니다
get_users(function(response) {
// process the user list here and continue whatever other code you
// need that deals with the user list
});
이 jQuery's deferred object를 사용 가능한 더 많은 고급 옵션이 있습니다.
'post'는 비동기식이므로 사용자가하려는 것처럼 값을 반환 할 수 없습니다. 당신이 정말로 이것을 필요로한다면, 나는 advice가 아니지만, ajax 호출을 synchronous [async : false] (http://api.jquery.com/jQuery.ajax/)로 설정한다. – Yoshi
이것은 범위 지정의 간단한 문제가 아닙니다. AJAX 호출은 비동기식입니다. 여기서 일어나는 일은 1. get_users를 호출하면 Ajax 요청을 보냅니다. 이제 get_users가 완료되었습니다. 2. 가까운 장래에 AJAX 요청이 반환되고 지정한 콜백 함수가 실행됩니다 (이 경우 콜백은 특히 흥미로운 작업을 수행하지 않습니다). – Asmor