如何访问块内的变量
我有一个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()
循环和因此没有任何东西被投入foo
或parse
。 要调试这种情况,您应该查看data
和data.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); });