jquery ajax,getJSON给出null

时间:2012-05-24 16:28:29

标签: javascript jquery html ajax

我有一个函数,我想从php文件中获取值:

var phrases = null;
function setPhrases(lang) {
    $.getJSON(locationHostname()+'json?json=lang&lang='+lang,
            function(json) {
        phrases = json;
        alert( 1 + ' ' + phrases);//phrases = [object Object]
    });
    alert( 2 + ' ' + phrases);//phrases = null
}
setPhrases('en');
alert(3+' '+phrases);//phrases = null

如何正确设置,即警报(3 +'+短语);获取一个对象而不是null?我想使用例如从getJSOn返回值的函数。

谢谢

4 个答案:

答案 0 :(得分:2)

$.getJSON是异步的,这就是你未定义的原因:当ajax调用仍在运行时执行alerts

您可以在成功事件上调用函数,并将json作为参数传递,例如

function setPhrases(lang) {
    $.getJSON(locationHostname()+'json?json=lang&lang='+lang,
        function(json) {
            continueProcessing(json)
        }
    );
}

function continueProcessing(obj) {
  ...
}

答案 1 :(得分:0)

你做不到。 .getJSON以异步方式运行,除非速度很快,否则alert(2)alert(3)将在完成之前运行。您需要将alert(2)alert(3)作为成功函数的一部分,或使用Deferred

编辑:我想因为它是电子的,它可能 闪电般快,甚至还不够!

答案 2 :(得分:0)

由于phrases的异步行为,我认为您无法在第三个alert()获得$.getJSON()

答案 3 :(得分:0)

你应该使用回调方法。你的getJSON方法的问题是它是异步的。

示例:

function setPhrases(lang, callback) {
    $.getJSON(locationHostname()+'json?json=lang&lang='+lang,
            function(json) {

        callback(json);
    });
}

   setPhrases('en',function(result) {

    alert(result);

});