1

我有一个函数,我想从 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

如何正确设置它,那个 alert(3+' '+phrases); 得到一个对象而不是null?我想使用例如从getJSOn 返回值的函数。

谢谢

4

4 回答 4

2

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

您可以在成功事件上调用函数,传递jsonas 参数,例如

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

function continueProcessing(obj) {
  ...
}
于 2012-05-24T16:30:08.963 回答
0

你不能。 .getJSON异步运行,除非速度快如闪电,否则alert(2)andalert(3)将在完成之前运行。您需要将alert(2)andalert(3)作为成功功能的一部分,或者使用Deferred.

编辑:我想因为它是电子的,所以它可能快如闪电,即使这样还不够!

于 2012-05-24T16:31:01.387 回答
0

phrases认为alert()由于$.getJSON().

于 2012-05-24T16:31:09.437 回答
0

你应该使用回调方法。您的 getJSON 方法存在异步问题。

例子:

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

        callback(json);
    });
}

   setPhrases('en',function(result) {

    alert(result);

});
于 2012-05-24T16:33:36.297 回答