0

.get()以下のようなjQueryメソッド を使用してファイルコンテンツを取得しようとしています

var news;
$.get('news.txt', function (dat) {
   news = dat;
   if ($('#removeN').is(':checked')) {
       news = "";
   }
   alert(news) // Displaying exact result;               
});
alert(news) // Displaying undefined..; Why?

誰かが私の疑問を明確にしてください。

4

4 に答える 4

4

JAXは非同期です

サーバーから応答を受け取る前に、最後の行が実行されます。

于 2012-08-01T14:02:45.253 に答える
3
var news;
$.get('news.txt', function (dat) {
   news = dat;
   if ($('#removeN').is(':checked')) {
       news = "";
   }
   alert(news) // BEFORE THIS!         
});
alert(news) // THIS EXECUTES

ニュースで何かをしたい場合は、代わりにこれを使用してください。

$.get('news.txt', function (dat) {
   news = dat;
   if ($('#removeN').is(':checked')) {
       news = "";
   }
   doSomething(news) // Displaying exact result;               
});

var doSomething = function(data) {
    alert(data);
}
于 2012-08-01T14:03:48.730 に答える
2

また、懸念事項を分離できるはずです..

var news;
$.get('news.txt', function (dat) {
   //process news       
}).done(function(dat){
   //display news, or maybe more processing related to this particular function block
   alert(news);
}).fail(function(){
   //oops, something happened in attempting to get the news.
   alert("failed to get the news");
}).always(function(){
   //this eventually gets called regardless of outcome
});

于 2012-08-01T14:50:41.467 に答える
1

$.get の 2 番目のパラメーターはcallbackです。基本的に $.get が行っているのは、コンテンツが読み込まれたイベントに対するイベント ハンドラーを設定し、「このイベントが発生したときに実行したい関数は次のとおりです」と言うことです。他の人が言ったように、そのイベントはまだ発生していないので、コードは通り抜けて初期化されていない変数を見つけます。

于 2012-08-01T14:44:18.613 に答える