0

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

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

4

1 回答 1

3

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

原因是您的 ajax 调用是异步的。这意味着操作开始,您的 javascript 的其余部分继续执行,然后在某个时间之后,ajax 调用完成,只有那时parse变量才有效。因此,确实没有理由以 parse您的方式声明变量。您应该只在.done()处理程序中使用它的值。

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


如果您尝试访问处理程序parse内部.done()并且它仍然是空的,那么问题可能data.item不是您认为的那样,并且可能没有触发.each()循环,因此没有任何东西进入fooor parsedata要调试这种情况,您应该查看和中究竟是什么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);
});
于 2013-10-30T05:50:04.743 回答