0

そのため、JSON データの受け渡しを理解するのに苦労しています。

function getFooterContent(){
//ajax call to get json file 
$.getJSON("scripts/pageData/footer/footerData.json", function(jsonData){
    console.log(jsonData);
    return jsonData;
}).fail(function(){
    console.log("fail");    
    return -1;
});

//Return the json file 
}

function someFunction(){
    var someContent = new Object();
someContent = getFooterContent();
console.log(someContent);
}

だから今、私はJSONファイルを呼び出しています。そして、console.log(jsonData) を取得すると、必要なオブジェクトが取得されます。それで、私はsomeContent.theContent. ただし、jsonData が someFunction に返されて console.log(someContent) になると、未定義になります。わかりません。getJSON関数にあるようなオブジェクトになると思いました。

4

2 に答える 2

4

getJSON は非同期で呼び出されるため、期待どおりの結果が得られません。

説明させてください:

function getFooterContent(){
//ajax call to get json file 
$.getJSON("scripts/pageData/footer/footerData.json", 
  function(jsonData){ // This function is executed when request is ready and server responds with OK
    console.log(jsonData);
    return jsonData;
}).

fail(function(){ // This when servers responds with error
    console.log("fail");    
    return -1;
});

//Return the json file 
// You are returning undefined actually
}

function someFunction(){
    var someContent = new Object();
someContent = getFooterContent();
console.log(someContent);
}

必要なもの:

function someFunction(){
    var someContent = new Object();
    getFooterContent(function(someContent){
      // someContent is passed by getFooterContent
      console.log(someContent);

    });
}

引数をコールバックJavaScript に渡す方法は次のとおりです。 パラメータをコールバック関数に渡す

あなたの機能では、次のようになります。

function getFooterContent(done, fail){
  $.getJSON("scripts/pageData/footer/footerData.json", 
  function(jsonData){ // This function is executed when request is ready and server responds with OK
    // console.log(jsonData);
    // return jsonData;
    done.call(null, jsonData); // or done.apply()
}).

fail(function(){ // This when servers responds with error
    // console.log("fail");    
    // return -1;
    fail.call(); // or fail.apply()

});
}
于 2013-04-30T21:32:26.683 に答える
2

これは$.getJSON非同期であるためです。そのため、getFooterContent()返された時点では JSON データはまだ取得されていないため、undefined.

代わりに行うべきことは、 promiseオブジェクトをgetFooterContent()返すことです。

function getFooterContent() {
    var promise = $.getJSON("url");
    return promise;
}

function someFunction() {
    var promise = getFooterContent();
    var outsideCopy;

    promise
    .done(function(data) {
        outsideCopy = data;
        console.log(outsideCopy);
    })
    .fail(function(e) {
        console.log('Error');
        console.log(e);
    });
}

上記の例は、変数宣言を削除することで短縮できます。コードが理解しやすいように残しました

于 2013-04-30T21:31:51.367 に答える