我有这个函数,它将为其他函数翻译字符串和短语,并应返回包含已翻译部分的数组。 当我尝试在另一个函数中调用该函数并且捕获器返回值时,我不断收到返回值未定义的消息。当我不让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();
}
答案 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调用返回时执行。