2

私はこのようなものを持っています:

<div id="content"></div>

およびJS:

function getData(id) {
    $.getJSON('url/to/jsondata',{id: id}, function(data) {
         /** append some data to div#content  **/
         $('#content').data('key', 'value');
     });

次に、スクリプトで#contentのデータを取得します。

$(document).ready(function() {
    getData(1); // run getData with some id
    console.log($('#content').data('key'));
});

問題は、getJSONのコールバックが終了した後にconsole.logが実行されないため、ログに未定義の値が含まれることです。それを機能させる正しい方法はどれですか?感謝!

4

3 に答える 3

2

コールバックはすでに定義されていますgetJSON/** append some data to div#content **/結果を取得するには、console.logコードをコメントと同じ関数の近くに配置します。

getJSONのjQueryドキュメントを次に示します。これにより、正しい引数とそのレイアウト方法を確認できます。http: //api.jquery.com/jQuery.getJSON/

于 2012-08-20T16:54:25.370 に答える
2

ajax関数からdefferedオブジェクトを返し、always、done、またはfailメソッドを使用します。

function getData(id) {
    return $.getJSON('url/to/jsondata',{id: id}, function(data) { //return this
         $('#content').data('key', data);
     });
}

$(document).ready(function() {
    getData('content').always(function() { //is returned as deffered object
        console.log($('#content').data('key')); //runs when ajax completed
    });
});​
于 2012-08-20T17:06:57.417 に答える
-1

次のように、log-callをcallback-functionに配置する必要があります。

function getData(id) {
    $.getJSON('url/to/jsondata',{id: id}, function(data) {
         /** append some data to div#content  **/
         $('#content').data('key', 'value');

         console.log($('#content').data('key'));
     });
于 2012-08-20T16:54:47.677 に答える