如何访问块内的变量

我有一个AJAX请求:

var foo = [], parse = ''; $.ajax({ type: "GET", url: "some/path/", data: somedata }).done(function( data ){ $.each(data.item, function(i, value){ foo.push(value); }); parse = foo.join(', '); }); 

现在字符串parse是我想要的数据。 我该如何访问这些数据? 我尝试使用alert()显示它,但它没有显示任何内容。 我认为这与变量范围有关。

我怎样才能获得这些数据?

parse看起来像一个全局变量,所以它可以在任何地方使用。 问题可能在于您尝试访问它时。 您只能在.done()处理程序或从中调用的某个函数中访问parse

原因是你的ajax调用是异步的。 这意味着操作开始,其余的javascript继续执行,然后稍后ajax调用完成,然后只有parse变量有效。 因此,没有理由按照你的方式声明parse变量。 您应该在.done()处理程序中使用它的值。

这是异步编程,其工作方式与同步,顺序编程不同。 您必须使用异步ajax调用的异步编程技术。


如果你试图在.done()处理程序中访问parse并且它仍然是空的,那么问题很可能是data.item不是你想象的那样,也许不会触发.each()循环和因此没有任何东西被投入fooparse 。 要调试这种情况,您应该查看datadata.item


这是我的建议:

 $.ajax({ type: "GET", url: "some/path/", data: somedata }).done(function( data ){ // no reason for these variables to be wider scope than here var foo = [], parse; $.each(data.item, function(i, value){ foo.push(value); }); parse = foo.join(', '); // look at parse here console.log(parse); // if parse still empty, then look at data and data.item here // to see what they are for debug reasons console.log(data); console.log(data.item); // now, you can use parse here callSomeFunction(parse); });