2009-08-14 1 views
2

나는이 난장판이 내 머리 속에 정리되어 있다고 생각했지만 이상한 이유로 작동하지 않습니다.자바 스크립트 로컬 대 글로벌

함수/범위 밖에서 변수를 선언하고 함수 내부에서 var를 사용하지 않고 변수를 참조하면 이전에 선언 한 변수를 변경합니다 ... 맞습니까?

그러나 첫 번째 경고는 올바른 가격을 반환하지만 두 번째 (마지막) 경고는 0을 반환합니다. 내가 뭘 잘못하고 있습니까? 요청에 대한 콜백 아직 트리거되지 같이 경고 제 (선언 제)는 원래 값을 경고 할 수 있도록 갔지를 사용

//get pricing 
var price=0; 
var modelid = $("#model_input").val(); 
var inCode = $("#code_input").val(); 
$.get("getpricing.php", { 'modelid': modelid ,'code' : inCode }, function(data){ 
    price = data; 
    alert(price); 
}); 
alert(price); 
+0

$ .get? (으)로 공급되는 함수 내에서 가격 변수를 정의하고 있습니까? –

+0

@meder : 코드에 콜백 함수가 있습니다 ... 아니요 추가 선언이 없습니다 –

답변

8

jax 요청을 사용 중입니다.

달리 지정하지 않은 경우는 입니다. 이는 나머지 스크립트 실행을 중단하지 않고 백그라운드에서 실행됩니다.

따라서 마지막 코드 행의 alert은 Ajax 요청이 완료되기 전에 실행됩니다. 그 때는 price이 아직 0 인 것을 의미합니다.

변경할 수있는 한 가지 방법은 동기 요청 (async option 참조)을 사용하는 것입니다. 하지만 강력히 반대합니다. 해당 문서 인용 : (이것은 기본적으로 true 로 설정 즉) 기본적으로

을, 모든 요청은 비동기 전송됩니다. 동기 요청이 필요한 경우이 옵션을 false로 설정하십시오. 동기 요청은 요청이 활성화되어있는 동안 어떤 작업도 사용하지 않도록 일시적으로 브라우저를 잠글 수 있습니다.

그리고 응용 프로그램이 전체 브라우저를 정지시키지 않도록하십시오!

Ajax 요청이 완료된 후에 만 ​​"가격"정보를 사용할 수 있습니다.이 경우에는 다음과 같은 함수에 코드를 추가해야합니다. 그 성공 : $.get 후에 코드를 배치하는 것으로는 충분하지 않습니다.

3

httprequests는 비동기이다.

+0

이상합니다. 나는 If와 For 루프가 나올 때까지 가격 변수를 사용하지 않고있다. 그러나 그때까지, 나는 아직도 내가 생각하는 전화를하지 않았다. 게시물을 변경하면 예상대로 작동합니까? – rideon88

+0

게시물과 가져 오기가 여전히 비동기입니다. –