【问题标题】:Batch translating with Google Language API使用 Google Language API 进行批量翻译
【发布时间】:2011-03-24 11:42:18
【问题描述】:

我正在尝试利用 Google 的 AJAX 语言 API 来翻译数组中的每个值。

for(var n=0; n < mytext.length; n++) {
 google.language.translate(mytext[n], originalLanguage, newLanguage, function(result){
  if(!result.error){
   document.getElementById("caption") += mytext[n]+" has been translated to "+result.translation;
  }
 })
}

这会正确翻译整个数组,但在 google.language.translate 调用的成功函数中,n 始终等于 mycaptions.length。这导致 mycaptions[n] 返回未定义(例如,“已翻译为 Hola”)。这让我困惑了好几天(为什么回调函数中的 n 值总是好像你在循环的末尾???),我猜答案在于我只是不知道的一个明显的编程不明白。

【问题讨论】:

    标签: javascript ajax loops for-loop google-language-api


    【解决方案1】:

    这与闭包在 JavaScript 中的工作方式有关;当 JavaScript 创建一个闭包时,任何被使用的变量都会被引用,而不是被复制,所以当你构造匿名函数时,它会存储对 n 的引用,而不是复制 n 的值。因此,当它实际被调用时,它以n 的当前值运行(这是在循环结束时分配给它的值)。解决方法是创建一个接受参数n 并返回闭包的函数:

    function createSuccessFunction(n) {
        return function() {
              // behavior on success
        };
    }
    
    // use createSuccessFunction(n) where you need a callback
    

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 2018-08-30
      • 2014-07-14
      • 2022-06-26
      • 1970-01-01
      • 2019-02-27
      • 2019-07-11
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多