2016-09-12 10 views
-1

I次のスクリプトを持っている:非同期を使用せずにグローバル変数へのAJAXの応答を割り当てる:偽

var myData; 

$.ajax({ 
    url: "/foo.php", 
    dataType : 'json', 
    type: "POST", 
    async: false 
    }) 
    .done(function(data) { 
     myData = data; 
    }); 

私はmyDataにAJAX応答からデータを割り当て、さらに下でこの変数を参照されやりたいすべて私のスクリプト。上記のコードはうまくいくようですが、私が読んだasync: falseに依存しているのは良いことではありません。私がこれをコメントアウトすると、デフォルトのasync: trueが使用されます。myDataには何も割り当てられません。

私はjQuery ajax success callback function definitionの投稿を読んだことがありますが、適応できないため、myDataのデータにアクセスできます。また、2013年に質問されたので、それがまだ正確か、これについて正しい方法があるかどうかはわかりません。

どうすればいいですか?私はjquery v1.11.1を使用しています

+1

あなたは適切なやり方をしています、問題はあなたが何らかの関数などでアクセスすると、変数myData'にアクセスしようとしている前に 'done'コールバックの中で呼び出すことです。情報のおかげで@pwolaq – pwolaq

+0

ありがとう。それがどのように行われているかを私が見ている場所に向けることができる例はありますか?私はjqueryの新機能で、そのような関数をどこに配置し呼び出すかを理解しようとしています。 – Andy

答えて

1

ですので、次のように動作するようです。 async: falseを削除し、ajax呼び出しのデータを参照する関数を追加しました。

$.ajax({ 
    url: "/foo.php", 
    dataType : 'json', 
    type: "POST" 
}) 
.done(function(data) { 
    buildTree(data); 
}); 

function buildTree(data) { 
    console.log(data); 
    // other code that needs 'data' 
} 

これは、@ pwolaqの提案に基づいて正しいと仮定します。

関連する問題