javascript - JQuery,AJAX : How can I populate an array with a json return?

标签 javascript jquery ajax arrays

我正在尝试遵循代码,但只在警告框中显示“未定义”。任何人都知道我如何实际填充 .ajax 之外的数组?

$(document).ready(function() {

    var reviewArray = new Array();

    getReviews();

    alert(reviewArray[0]);

});

function getReviews()
{

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

    $.each( data.reviews, function( i, itemData ) {
       reviewArray[i] = itemData.review;
    });
    },
    error    : function ( XMLHttpRequest, textStatus, errorThrown) {
        var err = "An error has occured: " + errorThrown;
        $("body").append(err);
        }
    });

}

最佳答案

你有两个问题:

  1. Ajax 调用是异步的。 alert执行时,数组还没有填满(Ajax调用还没有返回)。
  2. 数组 reviewArray 不在 getReviews 的任何(父)范围内(即无法从该函数访问)。

alert 放入回调中:

$(document).ready(function() {  
    getReviews(function(reviewArray) {
         alert(reviewArray[0]);
    }); 
});

function getReviews(callback) {
    $.ajax({
        /*...*/
        success  : function (data) {
            var reviewArray = [];
            $.each( data.reviews, function( i, itemData ) {
               reviewArray[i] = itemData.review;
            });
            callback(reviewArray);
        },
        /*...*/
   });
}

如果你想通过预先声明 reviewArray 来做到这一点,你还必须在 ready 回调中定义 getReviews:

$(document).ready(function() {  
    var reviewArray = [];

    getReviews(function() {
         alert(reviewArray[0]);
    });

    function getReviews(callback) {
        $.ajax({
            /*...*/
            success  : function (data) {
                $.each( data.reviews, function( i, itemData ) {
                   reviewArray[i] = itemData.review;
                });
                callback();
            },
            /*...*/
       });
    }
}); 

但这样一来,您的应用程序的实际流程可能会更加困惑。

关于javascript - JQuery,AJAX : How can I populate an array with a json return?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4566042/

相关文章:

javascript - Webassembly:可能有共享对象吗?

javascript - 提醒用户点击的链接的 ID

javascript - 禁用/启用滚动的跨浏览器解决方案

php - 从 php/mysql 自动完成中获取值

javascript - 如果菜单在 react-select DropdownIndicator 处理程序中打开,则扣除

javascript - Graph API 嵌套请求响应

jquery - 无法从 json 文件中提取不同的数组名称

jquery - 命名空间自定义事件触发器

javascript - Jquery Validation 使用远程检查用户名

ajax - 通过前进/后退按钮点击页面时 IE 渲染 before-ajax-state