jQuery、JSON-P和Google翻译:各种错误

jQuery、JSON-P和Google翻译:各种错误,jquery,jsonp,google-translate,Jquery,Jsonp,Google Translate,我目前正在开发一个GreaseMonkey用户脚本,以提供内部网应用程序中某些表单字段的直接翻译 一切正常,直到我使用以下代码调用Google Translation API: var apiurl = 'https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=fr%7Cen&q='; $.getJSON(apiurl+encodeURIComponent(text)+"&ca

我目前正在开发一个GreaseMonkey用户脚本,以提供内部网应用程序中某些表单字段的直接翻译

一切正常,直到我使用以下代码调用Google Translation API:

var apiurl = 'https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=fr%7Cen&q=';
$.getJSON(apiurl+encodeURIComponent(text)+"&callback=?",function(data){
    alert('Translation Complete');
    //Change text
});
以下是我的问题:

  • 我被迫使用JSONP,因为这是一个跨域请求。为此,我在URL的末尾添加了
    &callback=?
    字符串。没有触发
    getJSON
    回调(但是响应数据是正确的),我在Firebug控制台中遇到了以下错误:
未定义jsonp1298988446807

  • 如果我改为使用
    &callback=foo
    ,FF似乎不喜欢它,因为我的请求不再是POST请求,它没有完成,但会显示(在网络面板中)

    选项请求\u不允许url 405方法

  • 如果我创建一个自定义函数来指定为callback,它也不会工作,因为该函数没有被调用(它只包含一个用于检查它是否工作的警报)

如果有人知道为什么这不起作用,请帮帮我,因为我的头差点撞到墙上(也许会有帮助)

谢谢


编辑:多亏了Scoobler,我相信我走得更远了一点。使用他的代码,我设法从我的脚本中获得了比
/ignore
更多的东西^^

该请求不会出现在Firebug的网络选项卡中,警报给出的响应为:

响应文本:未定义

返回的状态:错误

引发错误:引发错误:[异常…”组件不可用“nsresult:“0x80040111(NS\u错误\u不可用)”位置:“JS框架::file:///C:/Documents%20and%20Settings/username/Application%20Data/Mozilla/Firefox/Profiles/jmbr7ut9.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js::匿名::第396行“数据:否]


与此同时,我一直在自己进行研究,通过完整的演练(从),我遇到了一个跨域请求的jQuery/GreaseMonkey桥,但这显示了与Scoobler的脚本完全相同的错误,我会尝试使用完全限定的
.ajax()
调用,而不是短代码
.getJSON()

jQuery将提供一个唯一的回调名称,就像您看到的jsonp1298988446807一样,它还将定义函数,以便您可以使用普通的
.ajax()
success/failure/complete回调挂钩

请参见示例


还有另一个稍微动态一些的例子:(从英语翻译成法语,而不是上面的法语翻译成英语的代码)

也许可以试试这个-这是
.ajax()
更详细的语法,但您不必自己编码参数:

var apiurl = 'https://ajax.googleapis.com/ajax/services/language/translate';

var text = 'il fonctionne parfaitement';

$.ajax({
    url: apiurl,
    dataType: 'jsonp',
    data: {
        v: "1.0",
        langpair: "fr|en",
        q: text
    },
    success: function(data) {
        var translated = data.responseData.translatedText;
        alert('Translation Complete: ' + translated);
    }
});

请参阅。

事实上,GreaseMonkey API中有一个允许跨域请求的函数


使用此选项可以使脚本立即工作。

我认为您的想法是正确的,但请求不会启动。我将检查我的代码以了解更多信息errors@Squ36如果您从上面复制并粘贴了代码,那么在成功回调的末尾会出现一个丢失的
}
——对此表示抱歉!我还包括了错误回调,这可能有助于消除som如果它不工作,请点亮。当任何
.ajax()
函数启动和停止时,两个额外的
.ajaxStart()
.ajaxStop()
应该会提醒您。我尝试了您的代码,它应该工作,但它不工作。我将更新我的OP以显示错误。
var apiurl = 'https://ajax.googleapis.com/ajax/services/language/translate';

var text = 'il fonctionne parfaitement';

$.ajax({
    url: apiurl,
    dataType: 'jsonp',
    data: {
        v: "1.0",
        langpair: "fr|en",
        q: text
    },
    success: function(data) {
        var translated = data.responseData.translatedText;
        alert('Translation Complete: ' + translated);
    }
});