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 : '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 get 被触发,然后 javascript 引擎继续执行代码的其余部分(在您的示例中,ajax 调用之外的两个 console.log )。在将来的某个地方,ajax 调用可能(也可能不会)从服务器获取响应(并通过更改其状态来通知这一点)。此时,JavaScript 引擎将处理所谓的“回调”函数 - 当 ajax 调用完成时将执行的代码。您将回调函数定义为 ajax 方法的 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']);

关于javascript - 使用 Jquery 将 ajax 响应保存到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18851619/

相关文章:

JavaScript:在未定义的新 Array() 上使用 .map() 和 .forEach()

javascript - 如何在 jQuery 中制作图像链接列表?

jquery - jqgrid分页不起作用

javascript - 如何使用 jQuery Toggle 定位具有公共(public)类的特定元素?

javascript - 如何使用 php 有效地将巨大的 javascript 字符串存储到文件中?

javascript - 有两个条件的禁用按钮

javascript - 扩展 Markdown 标签而不处理代码

javascript - select2 - 将获取远程数据与多个选择和预数据相结合

javascript - AJAX 内的 PHP 代码到 POST

javascript - AJAX 响应应更新 while 循环结果中的所有记录