我的函数的值是未定义的

时间:2011-10-30 14:37:06

标签: javascript function dojo return undefined

我有这个函数,它将为其他函数翻译字符串和短语,并应返回包含已翻译部分的数组。 当我尝试在另一个函数中调用该函数并且捕获器返回值时,我不断收到返回值未定义的消息。当我不让translate函数返回一个值但让她做一个她应该返回的值的警报时......一切顺利。

所以我做的是阻止函数translate()正确返回值或者函数picklanguage()没有收到返回值的东西。

function translate(translateObject)
{
    var translations = new Array();

    dojo.xhrPost({
        url: 'http://'+window.location.hostname+'/translate/translate',
        content: { str: dojo.toJson(translateObject) },
        handleAs: "json",
        timeout: 2000,
        load: function(response){

            dojo.forEach(response.items, function(strg){
                  var key = strg.string;
                  translations[strg.string] = strg.translation;
                });

            return translations;
        },
        error: function(response){
                return 'Ben';
        }
    });
}

function pickLanguage()
{
    var language = translate({title: 'Kies hier je gewenste taal', dutch: 'Nederlands', french: 'French', german: 'Deutch', english: 'English'});

    errorDialog = new dijit.Dialog({
          content: dump(language),
          style: "width: 450px"
      });

    errorDialog.show();
}

3 个答案:

答案 0 :(得分:3)

您正在使用 A JAX - 异步来电。

{/ 1}}回调在函数完成后运行一段时间;你不能从中返回一个值。

您需要使用回调来返回值,方式load

答案 1 :(得分:3)

我认为你误解了dojo.xhrPost是如何运作的。它是异步的,所以你需要回调:

function translate(translateObject, callback)
{
    var translations = new Array();

    dojo.xhrPost({
        url: 'http://'+window.location.hostname+'/translate/translate',
        content: { str: dojo.toJson(translateObject) },
        handleAs: "json",
        timeout: 2000,
        load: function(response){

            dojo.forEach(response.items, function(strg){
                  var key = strg.string;
                  translations[strg.string] = strg.translation;
                });

            callback(translations);
        },
        error: function(response){
                callback('Ben');
        }
    });
}

function pickLanguage()
{
    translate({title: 'Kies hier je gewenste taal', dutch: 'Nederlands', french: 'French', german: 'Deutch', english: 'English'}, function(language) {
        errorDialog = new dijit.Dialog({
              content: dump(language),
              style: "width: 450px"
        });

        errorDialog.show();
    });
}

答案 2 :(得分:0)

translate函数立即返回。

这是一个ajax请求 - 它是异步处理的。 pickLanguage中的代码应该在ajax回调中,该回调在Ajax调用返回时执行。