簡體   English   中英

Google Translate API:無法加載XMLHttpRequest。 Access-Control-Allow-Origin不允許來源http://test.dyndns.org

[英]Google Translate API: XMLHttpRequest cannot load. Origin http://test.dyndns.org is not allowed by Access-Control-Allow-Origin

我剛剛獲得了對Google Translate API v2的API訪問權限,並且我在AJAX請求中使用了我的API密鑰,但我一直收到此錯誤消息:

XMLHttpRequest無法加載https://www.googleapis.com/language/translate/v2?key=[myKey]&source=zh-CN&target=en&q=%E6%82%A8%E5%A5%BD%E4%B8%96 %E7%95%8C%0A。 Access-Control-Allow-Origin不允許來源http:// [mySub] .dyndns.org。

我已經閱讀了所有相似的帖子,但我仍然無法弄清楚問題是什么。 請注意,滿足以下條件:

  1. 我通過dyndns.org在我自己的Apache服務器上托管這個,所以我沒有在瀏覽器中使用本地文件引用。 我實際上有一個http:// [mySub] .dyndns.org匹配錯誤信息,我也沒有使用任何時髦的端口。 我正在使用端口80.但是,服務器和客戶端是同一台機器。
  2. 我在Windows上使用谷歌瀏覽器13.0.782.220米。 我沒有在IE或Firefox中看到此錯誤,但回調函數也不適用於這些瀏覽器。
  3. 錯誤消息中的鏈接實際上工作正常。

這是我的jQuery ......

$.ajax({
    url: 'https://www.googleapis.com/language/translate/v2',
    datatype: 'json',
    data: {
        key: '[myKey]',
        source: 'zh-CN',
        target: 'en',
        q: '您好世界' // Hello world
    },
    success: function(data) {
        console.log(data);
    },
    failure: function() {
        console.log('failure');
    }
});

我希望這是顯而易見的!

您應該使用jsonp而不是json作為dataType。

看看這個例子: http//jsfiddle.net/H9mfd/

工作實例感謝CD =獲獎

var apiKey = "YOUR-API-KEY-HERE";
var langSource = "en";
var langTarget = "it";
var apiurl = "https://www.googleapis.com/language/translate/v2?key=" + apiKey + "&source=" + langSource + "&target=" + langTarget + "&q=";
var text = 'This is a test string';

$.ajax({
    url: apiurl + encodeURIComponent(text),
    dataType: 'jsonp',
    success: function(data) {
        // console.log(data);
        console.log(data.data.translations[0].translatedText);
    }
});

很有幫助。 +1。

這是提供的示例,循環通過JSON對象來替換值:

var dictionary = {"term" : "term"};
    var apiKey = YOUR API KEY;
    var langSource = "en";
    var langTarget = "it";
    var apiurl = "https://www.googleapis.com/language/translate/v2?key=" + apiKey + "&source=" + langSource + "&target=" + langTarget + "&q=";
    var newDictionary = {};

 $.each(dictionary, function(key, value) {
    $.ajax({
       url: apiurl + encodeURIComponent(value),
       dataType: 'jsonp',
       success: function(data) {
          var localO = new Object();
          localO[key] =  data.data.translations[0].translatedText;
          $.extend(newDictionary, localO); 
       }
    });
 });

//newDictionary == {"term": "italian translation"}

嘗試使用以下標志啟動Google Chrome:

- 禁用網絡安全

該錯誤可能是由於谷歌Chrome“同源策略”,這是避免跨域ajax調用的一項功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM