0

EXTERNAL json ファイルのオブジェクトの配列に JavaScript 配列を割り当てるにはどうすればよいですか?

これが私が試したことです。

JavaScript スニペット

var i = 0;
var testjson = $.getJSON('/TestJSON');
jsonObj = JSON.parse(testjson);

$("#testJSONBtn").click(function () {
    while (i <= jsonObj.events.length) {
        $("#JSONOutput").append(jsonObj.events[i].title + ", " + jsonObj.events[i].date + ", " + jsonObj.events[i].explanation + "<br/>")
        i += 1;
    }
});

JSON ファイルの内容

{
"events":
[
    {"title":"Okmulgee Public Schools Starts 3rd Quarter" , "date":"1-2-2013" , "explanation":"Okmulgee Public Schools begins its third quarter."}
    {"title":"Okmulgee Public Schools-Closed in Observance of Martin Luther King Jr. Holiday" , "date":"1-21-2013" , "explanation":"The Okmulgee Public Schools will be closed in observance of the Martin Luther King Jr. holiday."}
    {"title":"Okmulgee Public Schools County Professional Day" , "date":"2-1-2013" , "explanation":"Okmulgee Public Schools County Professional Day is today."}
]
}

私は何を間違っていますか?

4

3 に答える 3

4

AJAX 関数にはデータの戻り値がなく、AJAX オブジェクトを返すだけです。

コールバックを使用する必要があります。

これを試して:

$.getJSON('/TestJSON', function(jsonObj){
    $("#testJSONBtn").click(function () {
        for(var i = 0; i < jsonObj.events.length; ++i) {
            $("#JSONOutput").append(jsonObj.events[i].title + ", " + jsonObj.events[i].date + ", " + jsonObj.events[i].explanation + "<br/>")
        }
    });
});

より良い:

var btn = $("#testJSONBtn"); //cache the element
var output = $("#JSONOutput"); // ^^^
$.getJSON('/TestJSON', function(jsonObj){
    btn.click(function () {
        var val = "";
        for(var i = 0; i < jsonObj.events.length; ++i) {
            val += jsonObj.events[i].title + ", " + jsonObj.events[i].date + ", " + jsonObj.events[i].explanation + "<br/>";
        }
        output.append(val);
    });
});

サイドポイント:

意図的かどうかはわかりませんが、OPではJSONファイルが合法的に見えず、コンマがありません. (ソース

于 2013-01-02T20:32:24.410 に答える
2

あなたの問題はここにあります:

var testjson = $.getJSON('/TestJSON');
jsonObj = JSON.parse(testjson);

$.getJSON既に JSON を JavaScript オブジェクトに解析し、それをコールバックに渡します。

代わりにこれを使用してください:

$.getJSON('/TestJSON', function (jsonObj) {
    $("#testJSONBtn").click(function () {
        $.each(jsonObj.events, function (){
             $("#JSONOutput").append(this.title + ", " + this.date + ", " + this.explanation + "<br/>");
        });
    });
});

PSパフォーマンスのために、セレクターをキャッシュし、すべてを一気に追加することを検討してください。

于 2013-01-02T20:32:10.727 に答える
0

質問のタイトルには、「外部jsonファイルからオブジェクトの配列を取得し、javascriptの配列として保存する」と記載されているため、提案されたソリューションには、データを配列に保存することが含まれます。

var i;
// Prepare an empty array to store the results
var array = [];
// $.getJSON() is a wrapper for $.ajax(), and it returns a deffered jQuery object
var deferred = $.getJSON('/TestJSON');

deferred.done(function (response) {
    // Any code placed here will be executed if the $.getJSON() method
    // was completed successfully.
    for ( i = 0 ; i < response.length ; i++ ) {
        array.push({ 
            title: response.title, 
            date: response.date,
            explanation: response.explanation
        });
    }
});

$.getJSON()関数の戻り値と、遅延オブジェクトの使用について詳しく知ることができます。

于 2013-01-02T21:12:10.623 に答える