0

你能告诉我我在这里做错了什么吗?我知道它的简单问题,但为此花了一整天。我试图做的就是向来自 json 文件的名为 messages 的数组添加一个值。

    function get_message(params) {

    var messages = ["hello", "bb"]; // i have manually assigned the value here for   testing purpose
    $.getJSON("messages.json", function( json ) {
        var test="JSON Data: " + json.login.loginsuccess.excited.en[0] ; // this is working fine. just retrieving 1 value for testing 
        console.log(test); // it shows the output get from json file. this line is also fine
        messages.push(test);// here is the problem. why i am not being able to add value to this array messages?

    });
    alert(messages[2]);// it gives me out put undefined
    var index = Math.floor(Math.random() * messages.length);
    return messages[index];
}

谢谢

4

2 回答 2

0

这是因为 AJAX 调用是异步的,所以 alert() 行在数据推送到消息数组之前触发。尝试移动代码以在回调函数中显示警报。

于 2013-11-13T22:28:52.080 回答
0

getJson是异步的,因此您需要确保不会过早检查消息数组。您可能应该使用回调来获取所需的信息。

function get_message(params, callback) {
  var messages = ["hello", "bb"];
  $.getJSON("messages.json", function( json ) {
    var test="JSON Data: " + json.login.loginsuccess.excited.en[0];
    console.log(test);
    messages.push(test);
    alert(messages[2]);
    var index = Math.floor(Math.random() * messages.length);
    callback(messages[index]);
  });
}

并使用如下:

get_message(params, function (data) {
  console.log(data);
});
于 2013-11-13T22:31:51.310 回答