无法将返回的数据从 $.get 传递到 JavaScript 中的变量或数组

Cannot pass returned data from $.get to variable or array in JavaScript

本文关键字:JavaScript 变量 数组 get 返回 数据      更新时间:2023-09-26

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

var data = [];
function outside(text) {
data.push(text);
}
$.get( "../../services/content/test.php", function( content ) {
 outside(content);
});
alert(data); 

在从 Ajax 请求中获取结果之前,您的alert被调用。如果您在回调中执行alert $.get,则会有一个可用的输出,因此:

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

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

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 响应推送到数组之前,数组会发出警报。

试试这个,

 var data = [];
 function outside(text) {
  data.push(text);
  alert(data); 
 }
 $.get( "../../services/content/test.php", function( content ) {
  outside(content);
 });

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

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

要考虑的另一件事是,您为outside函数创建了一个不必要的包装器函数。如果outside不是通用函数,而是仅以这种方式使用,则无需包装它 - 只需将其作为第二个参数传递即可。

var data = [];
function outside(text) {
  data.push(text);
  alert(data);
}
$.get( "../../services/content/test.php", outside);