JavaScript: Ajax 요청 후 글로벌 변수
질문은 매우 간단하고 기술적인 것입니다.
var it_works = false;
$.post("some_file.php", '', function(data) {
it_works = true;
});
alert(it_works); # false (yes, that 'alert' has to be here and not inside $.post itself)
내가 달성하고 싶은 것은:
alert(it_works); # true
그렇게 할 수 있는 방법이 있나요?할 수 없는 경우$.post()적용할 값을 반환하다it_works?
필요한 것은 동기(블로킹) 유형의 요구입니다.
var it_works = false;
jQuery.ajax({
type: "POST",
url: 'some_file.php',
success: function (data) {
it_works = true;
},
async: false // <- this turns it into synchronous
});
// Execution is BLOCKED until request finishes.
// it_works is available
alert(it_works);
기본적으로 요청은 비동기(비차단)이며, 브라우저는 작업을 계속하기 위해 요청이 완료될 때까지 기다리지 않습니다.그래서 네 경고 결과가 잘못된 거야.
이제 필요에 따라 요청을 동기화할 수 있습니다.즉, 요청이 완료된 후에만 스크립트가 계속 실행됩니다.
단, 권장되는 방법은 요청이 완료되는 즉시 데이터가 콜백 함수에 전달되도록 코드를 리팩터링하는 것입니다.실행 차단은 UI를 차단하는 것을 의미하므로 이 방법이 선호됩니다.다음과 같이 합니다.
$.post("some_file.php", '', function(data) {
iDependOnMyParameter(data);
});
function iDependOnMyParameter(param) {
// You should do your work here that depends on the result of the request!
alert(param)
}
// All code here should be INDEPENDENT of the result of your AJAX request
// ...
비동기 프로그래밍은 요구를 하는 결과가 요구문을 따르는 대신 함수에 캡슐화되기 때문에 약간 더 복잡하다.그러나 느린 서버나 느린 네트워크를 볼 수 없기 때문에 사용자가 경험하는 실시간 동작은 브라우저가 크래쉬한 것처럼 동작합니다.동기 프로그래밍은 무례하며 사람들이 사용하는 응용 프로그램에 사용해서는 안 됩니다.
더글러스 크록포드 (YUI 블로그)
AJAX는 Asynchronous JavaScript와 XML의 약자입니다.따라서 서버에 대한 투고는 나머지 함수와 동기화되지 않습니다.대신 이와 같은 코드를 사용해 보십시오(속기가 깨질 뿐입니다).$.post장기에 걸쳐서$.ajax를 호출하여 추가합니다.async옵션)을 클릭합니다.
var it_works = false;
$.ajax({
type: 'POST',
async: false,
url: "some_file.php",
data: "",
success: function() {it_works = true;}
});
alert(it_works);
이게 도움이 됐으면 좋겠네요!
당신의 문제는 단순히 동시성 문제인 것 같습니다.post 함수는 callback 인수를 사용하여 투고가 완료된 시간을 알려줍니다.이와 같이 글로벌 범위에서 경고를 만들 수 없으며 게시물이 이미 완료되었다고 기대할 수 없습니다.콜백 기능으로 이동해야 합니다.
는 " " " 입니다.post()는 서버에 대한 비동기 요구를 시작합니다.그게 당신에게 의미하는 것은post()는 예상대로 요구가 완료된 후가 아니라 즉시 반환됩니다.
따라서 요청이 동기화되어 요청이 완료될 때까지 현재 스레드를 차단해야 합니다.따라서,
var it_works = false;
$.ajax({
url: 'some_file.php',
async: false, # makes request synchronous
success: function() {
it_works = true;
}
});
alert(it_works);
언급URL : https://stackoverflow.com/questions/3222347/javascript-global-variables-after-ajax-requests
'source' 카테고리의 다른 글
| IIS를 통해 제공되는 단일 페이지 응용 프로그램 HTML 파일의 캐시를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.03.28 |
|---|---|
| create-react-app을 사용할 때 사용자 지정 빌드 출력 폴더 사용 (0) | 2023.03.28 |
| ASP.NET Core 3.0 시스템Text.Json Camel 케이스 시리얼화 (0) | 2023.03.28 |
| 리액트 라우터에서 일반 앵커링크를 사용하는 방법 (0) | 2023.03.28 |
| LinqPad에서 변경 내용을 제출하는 방법 (0) | 2023.03.28 |