2012-11-23 4 views
-1

JSON 응답을 구문 분석하려고하는데, $ .getJSON에있는 명령을 실행할 수 없습니다.

json.html

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="js/jquery.js"></script> 
    </head> 
    <body> 
     <script> 
      $.getJSON("json.php?jsoncallback=?", function(data) { 
       var a = data[0].cve_id + 'something'; 
      }); 
      alert(a); //chrome says "a is not defined" 
     </script> 
    </body> 
</html> 

json.php : 왜

<?php 
header("Content-Type: application/json", true); 
echo file_get_contents("http://www.cvedetails.com/json-feed.php?numrows=10&vendor_id=0&product_id=0&version_id=0&hasexp=1&opec=1&opov=1&opcsrf=1&opfileinc=1&opgpriv=1&opsqli=1&opxss=1&opdirt=1&opmemc=1&ophttprs=1&opbyp=1&opginf=1&opdos=1&orderby=1&cvssscoremin=0"); 
?> 

어떤 생각?

다음 :

답장을 보내 주셔서 감사합니다. 이유를 이해했습니다.

$.getJSON에서 $.get으로 변경했으며 data type에서 json으로 지정했습니다.

+1

귀하의 AJAX 비동기입니다. 변수에는 범위가 있습니다. –

+1

'alert (a)'가 발생하면 비동기식 AJAX 호출이 아직 완료되지 않았습니다. 'function (data)'콜백 내에서'alert (a)'를 할 필요가있다. 이 값을 사용하여 DOM을 수정해야한다면 콜백에서 그렇게해야합니다. –

+2

_chrome은 "a not defined"_를 선언합니다. 왜냐하면'a'는 콜백 함수 내에서 _local_ 변수로 정의 되었기 때문에' $ .getJSON()'이므로 해당 함수 내에서만 액세스 할 수 있습니다 (비동기 문제 제외). – nnnnnn

답변

1

VAR A를 아 파크 발생했을 때 그들을 호출 할 수 있습니다은 콜백 클로저 (익명 함수) 내부에 정의됩니다. 클로저를 사용하는 주된 이유 중 하나는 개인 범위를 생성한다는 것입니다. 나는. 함수 내에 정의 된 모든 변수는 함수 외부에서 코드를 작성할 수 없습니다.

이 작동합니다 :

$.getJSON("json.php?jsoncallback=?", function(data) { 
    var a = data[0].cve_id + 'something'; 
    alert(a); 
}); 
2

JSON 호출이 비동기 적이므로 콜백 함수는 데이터를 반환 할 때까지 호출되지 않습니다. 그러나 자바 스크립트 코드는 다음 코드 행을 계속 실행합니다. 의 라인을 따라 뭔가를해야만로 변경하는 STIL되는 정의되지 않은 시도의 결과 :

$.getJSON("json.php?jsoncallback=?", function(data) { 
    var a = data[0].cve_id + 'something'; 
    alert(a) 
}); 

당신은 콜백 이외의 다른 방법을 정의하고 이벤트가 PROPPER 데이터