截至目前,我有一个脚本元素,每当注册onclick并且sourceText是需要翻译的文本时,我都会附加我的api请求。回调函数只是在网页上打印出一些内容(更改全局变量,然后单独的函数输出该全局变量)
source = 'https://www.googleapis.com/language/translate/v2?key=YOUR_API_KEY&source=en&target=de&callback=translateText&q=' + sourceText;
newScript.src = source;
document.getElementsByTagName('head')[0].appendChild(newScript);
问题是它适用于第一次翻译(第一次点击),但之后,在将脚本添加到头部后,翻译不会改变。事实上,在第一次调用之后永远不会调用回调函数,而新输出只是第一个翻译的字符串。有什么方法可以解决这个问题吗?
据我了解,使用google.load(“语言”)可能有一种更简单的方法可以让某人指出我正确的方向吗?
答案 0 :(得分:0)
截至目前,您正在使用一种调用脚本的hackyish方式。虽然脚本是某种“执行”,但我建议写一种类并激发真正的ajax请求。为了让自己更容易一些,我会使用jQuery(或类似的东西),并编写一个可维护的类。它可能看起来像这样(没有以任何方式测试,但给你一个线索;))
var Translate = function( translateHandler ) {
this.endpoint = 'https://www.googleapis/language/translate/v2';
this.apiKey = 'xyz';
this.translateHandler = translateHandler;
};
Translate.prototype.translate = function ( text, source, target ) {
$.get(this.endpoint, {
key: this.apiKey,
q: text,
source: source,
target: target
}, this.translateHandler.bind(this));
};
// usage
var handler = function( result) {
// do something with the result
};
var translater = new Translate( handler );
$('#myButton').on('click', function(e) {
e.preventDefault();
translater.translate( $('#source').text(), 'en', 'de') );
})