2

我正在尝试 alert() $.get 返回的数据或更准确地将其分配给 var data

var data = [];
function outside(text) {
data.push(text);
}

$.get( "../../services/content/test.php", function( content ) {
 outside(content);

});
alert(data); 
4

4 回答 4

2

alert在您从 Ajax 请求中获得结果之前,您会被调用。如果你做你alert$.get回调,会有一个输出可用,所以:

$.get( "../../services/content/test.php", function( content ) {
 outside(content);
 alert(data);
});

这是异步请求的正常行为。

于 2013-09-19T08:54:46.470 回答
0

Ajax 调用是异步的,因此无法保证数据在您发出警报时包含值。尝试在回调中提醒数据。

var data = [];
function outside(text) {
data.push(text);
}

$.get( "../../services/content/test.php", function( content ) {
 outside(content);
 alert(data); 
});

目前代码执行如下:

var data = [];
function outside(text) {
    data.push(text); //4. result is pushed to array.
}

//1.  Ajax call is made
$.get( "../../services/content/test.php", function( content ) {
 outside(content); //3.  Ajax call returns and outside function is called
});
//2.  data is alerted
alert(data);

您可以看到,在将 Ajax 响应推送到数组之前,数组已收到警报。

于 2013-09-19T08:55:53.197 回答
0

尝试这个,

 var data = [];
 function outside(text) {
  data.push(text);
  alert(data); 
 }

 $.get( "../../services/content/test.php", function( content ) {
  outside(content);

 });

$.get 是异步的,意味着浏览器不会等待它完成来执行下一行

于 2013-09-19T08:56:17.990 回答
0

默认情况下,jQuery 对服务器执行异步调用,然后将结果发送到作为参数传递的回调函数。这会导致您的警报在您的服务器响应请求并且您的内容被推送到data变量之前触发。

要考虑的另一件事是您为您的函数创建了一个不必要的包装outside函数。ifoutside不是一个通用函数,而是专门用于以这种方式使用的,不需要包装它 - 只需将它作为第二个参数传递。

var data = [];
function outside(text) {
  data.push(text);
  alert(data);
}
$.get( "../../services/content/test.php", outside);
于 2013-09-19T09:00:03.850 回答