如何访问块内的变量

时间:2013-10-30 05:40:20

标签: javascript jquery

我有一个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()显示它,但它没有显示任何内容。我认为这与变量范围有关。

如何获取该数据?

1 个答案:

答案 0 :(得分:3)

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

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

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


如果您尝试访问parse处理程序中的.done()并且它仍然是空的,那么问题可能是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);
});