JQuery,AJAX:如何使用json返回填充数组?

dav*_*mcd 1 javascript arrays ajax jquery

我正在尝试关注代码,但只在警告框中显示"未定义".任何人都知道如何在.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);
        }
    });

}
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 7

你有两个问题:

  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);
        },
        /*...*/
   });
}
Run Code Online (Sandbox Code Playgroud)

如果你想reviewArray事先声明,你还必须getReviewsready回调中定义:

$(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();
            },
            /*...*/
       });
    }
}); 
Run Code Online (Sandbox Code Playgroud)

但是这样,应用程序的实际流程可能会更加混乱.