Javascript推送方法不起作用

时间:2012-04-20 16:27:00

标签: javascript json jquery

我无法将元素推送到工作数组。控制台日志返回正确的对象,但它们不会被推送到数组......这是我的代码:

var works = new Array();
    $(window).ready(function()
    {       

        $.getJSON('AJAX/getWorks.php', function(data) {
          $.each(data, function(key, val) {
             console.log(val);
             works.push(val);
          });
        });
        console.log(works);
    });

和json对象:

Object
date: "2012-04-08 17:53:58"
description: "sadasd"
id: "2"
link: "sadasd"
name: "dsad"
objects: null
position: "2"
__proto__: Object

有人看到我做错了吗?提前感谢您的答案...

1 个答案:

答案 0 :(得分:5)

您在代码中过早地记录了数组。 console.log将在ajax请求完成之前运行,因为ajax是异步的。

    $.getJSON('AJAX/getWorks.php', function(data) {
              $.each(data, function(key, val) {
                 console.log(val);
                 works.push(val);
              });
              console.log(works); // move this here so the array is logged after the ajax request finishes. 
            });

编辑

如果要在ajax请求后使用该变量,可以执行以下操作

创建一个容纳ajax请求的函数

function getWorks() 
{
    return  $.getJSON('AJAX/getWorks.php', function(data) {
              $.each(data, function(key, val) {
                 works.push(val);
              }); 
} 

然后,您可以执行以下操作以确保ajax请求已完成。

 $.when( getWorks() ).then(function(){ 
     // you can access the array in here because the ajax has finished executing
 });