0

我正在尝试使用 jQuery.get()方法获取文件内容,如下所示

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 的第二个参数是一个回调。本质上,$.get 所做的是为内容加载事件设置一个事件处理程序,并说“这是我想在触发此事件时运行的函数”。就像其他人所说的那样,它还没有触发那个事件,所以代码会漫无目的地找到你未初始化的变量。

于 2012-08-01T14:44:18.613 回答