2013-10-17 55 views
-4

这个问题已经回答投票。我的编辑有关使其更清晰,并分享一些其他开发人员获得的新知识,我不期待新答案未定义回报

我正在用jQuery阅读XML,但是当我尝试显示警报时,它完全正常工作;但是,当我尝试返回值时,它总是给我一个消息,说明它未定义。

function getText(value){ 

    var val; 
    var lang; 
    var location; 
    lang=getLanguage(); 

    if (lang=='en') 
     lang=''; 
    else 
     lang+='.'; 

    location="resources/AppResources."+lang+'xml'; 

    $.get(location, function (xml) { 
     $(xml).find("data").each(function() { 

      var name=$(this).attr('name'); 

      if (name===value) 
       return $(this).find('value').text(); 
     }); 
    }); 

} 

这是调用它的代码:

$(document).ready(function() { 
    alert(getText('AppTitle')); 
}); 

如果我在return语句添加提醒它让我选择的值。

小更新:

正如阿伦P佐尼在他的回答解释说,在我的代码错过的部分是由Mozilla的这样定义的callback

回调函数是一个函数作为参数传递给另一个函数,然后在外部函数中调用该函数以完成某种例程或动作。

回答

1

你不能从一个异步方法返回一个值,最简单的解决方法是使用一个回调函数,像这样的:

function getText(value, callback) { 
    var val; 
    var lang; 
    var location; 
    lang = getLanguage(); 

    if (lang == 'en') 
     lang = ''; 
    else 
     lang += '.'; 

    location = "resources/AppResources." + lang + 'xml'; 

    $.get(location, function (xml) { 
     $(xml).find('data[name="' + value + '"]').each(function() { 
      callback($(this).find('value').text()); 
     }); 
    }); 

} 

$(document).ready(function() { 
    getText('AppTitle', function(value){ 
     alert(value); 
    }) 
}); 
+0

谢谢,但我不知道它只能在Firefox中: \当我尝试在其他浏览器中测试时,它不会执行任何操作。 –

+0

像这样的错误正在向我展示。 xmlhttprequest无法加载xml。访问控制允许来源不允许访问 –

+1

@ user2889347阅读有关同源策略 –