Javascript 使用Jquery将ajax响应保存到阵列

Javascript 使用Jquery将ajax响应保存到阵列,javascript,jquery,ajax,Javascript,Jquery,Ajax,我得到了一个Jquery ajax调用,它从我得到的一个php文件中得到了一个json响应,json响应非常好,我可以通过控制台正确记录响应,但是我似乎无法将信息保存在ajax结果之外,它不会更新数组。代码如下所示,我在下面发布了结果 window.array={name: 'john',color:'red'}; console.log(array['name']); console.log(array['color']); $.ajax({ url : 'getJso

我得到了一个Jquery ajax调用,它从我得到的一个php文件中得到了一个json响应,json响应非常好,我可以通过控制台正确记录响应,但是我似乎无法将信息保存在ajax结果之外,它不会更新数组。代码如下所示,我在下面发布了结果

window.array={name: 'john',color:'red'};    

 console.log(array['name']);
 console.log(array['color']);

$.ajax({
    url : 'getJsons.php',
    type : 'POST',
    data : data,
    dataType : 'json',
    success : function (data) {

      array['name'] = data['name'];
      array['color'] = data['color'];
      console.log(array['name']);
      console.log(array['color']);
     }        
});

 console.log(array['name']);
 console.log(array['color']);
这将导致以下控制台:

 john
 red

 john
 red

 marry
 blue

因此,我第一次就正确地使用了控制台,但它似乎在ajax调用之后加载脚本,而在ajax调用之前加载脚本,这是为什么?因为这使得我无法在代码的其余部分使用ajax结果,因为它是在脚本加载之后获取的。有没有办法让ajax在其他调用之前运行?

在ajax调用完成之前运行查询之后的代码。您的数组已经填充,不用担心,但是因为AJAX是异步运行的,所以它只会在AJAX调用之后分配值

例如,如果在ajax调用后设置10秒超时(取决于ajax调用所花的时间),然后调用数组值,则会发现这些值已填充(前提是ajax已正确运行并通过回调函数)

所以在你的代码中,一步一步的发生

显示显示john red的数组中的值

您进行AJAX调用,当该调用完成时,它将执行您的success:function

ajax调用需要(比如)1秒才能完成

当您的页面等待调用完成并更新值时,它会移动到显示数组的下一位代码上,因为数组尚未更新,因为尚未调用success,它仍然显示john red


1秒后,调用success函数,将新名称分配给数组并将其打印出来。

在ajax调用完成之前运行查询之后,发生的是代码。您的数组已经填充,不用担心,但是因为AJAX是异步运行的,所以它只会在AJAX调用之后分配值

例如,如果在ajax调用后设置10秒超时(取决于ajax调用所花的时间),然后调用数组值,则会发现这些值已填充(前提是ajax已正确运行并通过回调函数)

所以在你的代码中,一步一步的发生

显示显示john red的数组中的值

您进行AJAX调用,当该调用完成时,它将执行您的success:function

ajax调用需要(比如)1秒才能完成

当您的页面等待调用完成并更新值时,它会移动到显示数组的下一位代码上,因为数组尚未更新,因为尚未调用success,它仍然显示john red


1秒后,调用success函数,将新名称分配给数组并打印出来。

ajax调用是异步的,这意味着无论何时执行和返回ajax,都将执行其余代码。如果您的代码取决于结果,请将其包装在函数中,并从ajax(成功函数)的回调调用它。

ajax调用是异步的,这意味着无论何时执行和返回ajax,其余代码都将被执行。如果您的代码取决于结果,请将其封装在函数中,并从ajax的回调调用它(成功函数)。

由于您无法判断服务器的ajax响应何时到达,ajax默认为异步的。这意味着将触发
$.ajax
get,然后javascript引擎继续执行其余代码(在您的示例中,两个
console.log
s位于ajax调用之外)。在将来的某个时候,ajax调用可能(也可能不会)从服务器获得响应(并通过更改其状态来通知)。此时,javascript引擎将处理所谓的“回调”函数代码,该代码将在ajax调用完成时执行。您将回调函数定义为ajax方法的
success
参数

这就是为什么执行代码的正确方法是运行依赖于回调函数结果的所有内容。将所有内容直接放入其中,或声明一个单独的函数,然后可以在success函数中调用该函数:

$.ajax({
    /*...*/,
    success : function (data) {

      array['name'] = data['name'];
      array['color'] = data['color'];

      /* either put all your dependent code here */

      /* or just call a callback function: */
      callback(data);

     }        
});

/* code to be executed after the ajax call */
function callback(data){

   // work with the response here
   console.log(data);

}
前面的坏主意:

或者,您可以告诉呼叫是同步的(这很糟糕,因为您的浏览器在等待服务器应答时基本上是冻结的),并保持代码不变

$.ajax({
      /*...*/,
      async : false,     
});
// risk some waiting time (possibly the full duration of a timeout!!)
// the browser is locked during this time

// continue normally
console.log(array['name']);
console.log(array['color']);

由于您不可能知道来自服务器的ajax响应何时到达,因此ajax在默认情况下是异步的。这意味着将触发
$.ajax
get,然后javascript引擎继续执行其余代码(在您的示例中,两个
console.log
s位于ajax调用之外)。在将来的某个时候,ajax调用可能(也可能不会)从服务器获得响应(并通过更改其状态来通知)。此时,javascript引擎将处理所谓的“回调”函数代码,该代码将在ajax调用完成时执行。您将回调函数定义为ajax方法的
success
参数

这就是为什么执行代码的正确方法是运行依赖于回调函数结果的所有内容。将所有内容直接放入其中,或声明一个单独的函数,然后可以在success函数中调用该函数:

$.ajax({
    /*...*/,
    success : function (data) {

      array['name'] = data['name'];
      array['color'] = data['color'];

      /* either put all your dependent code here */

      /* or just call a callback function: */
      callback(data);

     }        
});

/* code to be executed after the ajax call */
function callback(data){

   // work with the response here
   console.log(data);

}
前面的坏主意:

或者,您可以告诉呼叫是同步的(这很糟糕,因为您的浏览器在等待服务器应答时基本上是冻结的),并保持代码不变

$.ajax({
      /*...*/,
      async : false,     
});
// risk some waiting time (possibly the full duration of a timeout!!)
// the browser is locked during this time

// continue normally
console.log(array['name']);
console.log(array['color']);
我不知道这是不是