Значение моей функции не определено - PullRequest
2 голосов
/ 30 октября 2011

У меня есть эта функция, которая будет переводить строки и фразы для других функций и должна возвращать массив с переведенными частями.Когда я пытаюсь вызвать функцию в другой функции и получить возвращаемое значение, я продолжаю получать сообщение о том, что возвращаемое значение не определено.Когда я не позволяю функции перевода вернуть значение, но заставляю ее сделать предупреждение со значением, которое она должна вернуть ... все идет хорошо.

Поэтому я делаю то, что мешает функции translate () вернуть значение должным образом или что функция picklanguage () не получает возвращенное значение.

Ответы [ 3 ]

3 голосов
/ 30 октября 2011

Вы не поняли, как работает 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();
    });
}
3 голосов
/ 30 октября 2011

Вы используете A JAX & ndash; асинхронные вызовы.

Обратный вызов load запускается через некоторое время после завершения вашей функции; вы не можете вернуть значение из него.

Вам необходимо вернуть значение с помощью обратного вызова, как это делает xhrPost.

0 голосов
/ 30 октября 2011

Функция translate немедленно возвращается.

Это ajax-запрос - он обрабатывается асинхронно. Код в pickLanguage должен быть в обратном вызове ajax, который выполняется, когда возвращается вызов Ajax.

...