-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");
?>

理由はありますか?

後で:

返信ありがとうございます。理由が分かりました。

$.getJSONto$.getを指定して、data typetoに切り替えましたjson

4

2 に答える 2

2

JSON呼び出しは非同期であるため、サーバーがデータを返すまでコールバック関数は呼び出されませんが、JavaScriptコードは次のコード行まで実行され続けます。その結果、スティルが未定義になるので、次の行に沿って何かに変更してみてください。

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

コールバックの外で他のメソッドを定義し、プロッパーデータでイベントが発生したときにemを呼び出すことができます

于 2012-11-23T01:23:04.463 に答える
1

var aは、コールバック クロージャ (無名関数) 内で定義されます。クロージャーを使用する主な理由の 1 つは、クロージャーがプライベート スコープを生成することです。つまり、関数内で定義された変数は、関数外のコードでは使用できません。

これはうまくいきます:

$.getJSON("json.php?jsoncallback=?", function(data) {
    var a = data[0].cve_id + 'something';
    alert(a);
});
于 2012-11-23T01:23:47.863 に答える