2011-12-22 20 views
1

私はGoogleのV1翻訳を使用していました。私のJavaScriptでは、ページがロードされた後に要素のコレクションをループし、テキストを翻訳し、結果を対応するテキストボックスに出力します。私は有料APIのV2に同じ機能を実装するのに苦労しています(請求は有効です)。Google翻訳でコールバックV2

これは、私がループ内で、V1にやったことです:コールバック関数は、要求に埋め込まれたので

google.language.translate(lookupText, 'gb', 'fr', function (result) { 
if (!result.error) { 
ctlSuggestion.innerText = result.translation; 
} 
}); 

は、これがうまく、その結果が来たら、私は正しい要素ののinnerTextを更新することができバック。

V2では、同じような方法のようには見えません。私はjQueryのアヤックスを使用してみましたが、私は、「アクセスが拒否されました」というメッセージ、私はそのクロスドメインコールか何かので、これがあると思いました。私はREST方式で動作するように取得することができます

$.ajax({ 
      type: "GET", 
      url: "https://www.googleapis.com/language/translate/v2", 
      data: { key: "API-KEY", source: "en", target: "fr", q: lookupText }, 
      dataType: 'json', 
      success: function (data) { 
        alert(data.data.translations[0].translatedText); 
        }, 
      error: function (data) { 
        alert('fail'); 
       } 
      }); 

が、コールバック関数での私は、コールバック関数に追加のパラメータを渡すことができれば、私は更新するコントロールを指定することもできますが、私は、これは使用可能ではないと思います

var newScript = document.createElement('script'); 
      newScript.type = 'text/javascript'; 
      var sourceText = "Hello World" 
      var source = 'https://www.googleapis.com/language/translate/v2?key=API-KEY=en&target=de&callback=translateText&q=' + sourceText; 
      newScript.src = source; 

      // When we add this script to the head, the request is sent off. 
      document.getElementsByTagName('head')[0].appendChild(newScript); 


      function translateText(response) { 
       alert(response.data.translations[0].translatedText); 
      } 

:リクエストから来たコントロール何を知る方法はありませんこの方法。

答えて

3

成功を呼び出すことができます!

私は$.ajax()メソッドを動作させることができました。個々の変換された要素ごとにコールバック関数を作成することができました。

最初の問題は、jQuery 1.4.xを使用していたことです。バージョン1.5以降では、JASONPデータ型を使用するときにクロスドメイン・コールが可能です。これが「アクセスが拒否されました」というメッセージが表示された理由です。

第二の変化はjsonpjspnからdataTypeを変更しました:これは他の人にいくつかの使用である

$.ajax({ 
      type: "GET", 
      url: "https://www.googleapis.com/language/translate/v2", 
      data: { key: "API-KEY", source: "en", target: "fr", q: lookupText }, 
      dataType: 'jsonp', 
      success: function (data) { 
        alert(data.data.translations[0].translatedText); 
        }, 
      error: function (data) { 
        alert('fail'); 
       } 
      }); 

希望。

+0

ルックアップテキストとはどこにデータを与えるのですか – Raghurocks

+0

パーフェクト!!! U私の日を保存しました:-) – Zax

3

さて、翻訳しているすべての要素に対して「新しい」コールバック関数を作成し、実行後にその関数を削除することができます。すなわちような何か:各要素について次に

function translateElement(elementID) { 

    var element = document.getElementsById(elementID); 

    // this is a temporary function for updating this particular element 
    window['translate'+elementID] = function(response) { 
     document.getElementsById(elementID).innerHTML = response.data.translations[0].translatedText; 
     setTimeout(function() { 
      // remove the temporary function 
      window['translate'+elementID] = null; 
     }, 1000); 
    }; 

    var newScript = document.createElement('script'); 
    newScript.type = 'text/javascript'; 
    var sourceText = "Hello World" 
    var source = 'https://www.googleapis.com/language/translate/v2?key=API-KEY=en&target=de&'+ 
    'callback=translate'+elementID+'&q=' + sourceText; 
    newScript.src = source; 

    // When we add this script to the head, the request is sent off. 
    document.getElementsByTagName('head')[0].appendChild(newScript); 
} 

あなたはtranslateElement(<id>)

+0

私は解決策を発見していない場合、私はこの方法を行ったでしょう。ヘッドアップをありがとう。 – SausageFingers

関連する問題