我有一个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()
显示它,但它没有显示任何内容。我认为这与变量范围有关。
如何获取该数据?
答案 0 :(得分:3)
parse
看起来像一个全局变量,所以它可以在任何地方使用。问题可能在于您尝试访问它时。您只能访问parse
处理程序中的.done()
或您从中调用的某些函数。
原因是你的ajax调用是异步的。这意味着操作开始,其余的javascript继续执行,然后稍后ajax调用完成,然后只有parse
变量有效。因此,没有理由按照您的方式声明parse
变量。您应该在.done()
处理程序中使用它的值。
这是异步编程,其工作方式与同步,顺序编程不同。您必须将异步编程技术与异步ajax调用一起使用。
如果您尝试访问parse
处理程序中的.done()
并且它仍然是空的,那么问题可能是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);
});