我有网址http://translate.google.ru/translate_a/t?client=x&text=enter text&sl=en&tl=pl
如果您将通过此链接进行回复,则您将拥有js文件
带文字:
{"sentences":[{"trans":"wprowadzania tekstu","orig":"enter text","translit":"","src_translit":""}],"src":"en","server_time":80}
我创建了ajax请求
function GoogleTranslateItem(sourceText, langFrom, langTo) {
$.ajax({
url: 'http://translate.google.ru/translate_a/t',
data: { client: "x", text: sourceText, sl: langFrom, tl: langTo },
dataType: 'jsonp',
jsonpCallback: "getData",
success: function (data) {
alert("Success");
}
});
function getData(data) {
var dataJson = data;
alert('bingo');
}
当答案来自服务器时。我无法处理它
浏览器中的显示js错误。
Syntax error at line 1 while loading:
{"sentences":[{"trans":"вход вых
------------^
expected ';', got ':'
Linked script compilation
我如何处理此回复?
答案 0 :(得分:1)
我认为你应该看看this(http://javascriptweblog.wordpress.com/2010/11/29/json-and-jsonp/)
var jsonp = {
callbackCounter: 0,
fetch: function(url, callback) {
var fn = 'JSONPCallback_' + this.callbackCounter++;
window[fn] = this.evalJSONP(callback);
url = url.replace('=JSONPCallback', '=' + fn);
var scriptTag = document.createElement('SCRIPT');
scriptTag.src = url;
document.getElementsByTagName('HEAD')[0].appendChild(scriptTag);
},
evalJSONP: function(callback) {
return function(data) {
var validJSON = false;
if (typeof data == "string") {
try {validJSON = JSON.parse(data);} catch (e) {
/*invalid JSON*/}
} else {
validJSON = JSON.parse(JSON.stringify(data));
window.console && console.warn(
'response data was not a JSON string');
}
if (validJSON) {
callback(validJSON);
} else {
throw("JSONP call returned invalid or empty JSON");
}
}
}
}
答案 1 :(得分:0)
来自http://translate.google.ru/translate_a/t?client=x&text=entertext&sl=en&tl=pl i JSON的回复,而不是JSON-P。以这种方式访问JSON数据是违反跨站点策略的,因为浏览器会阻止将此类响应返回给客户端。
由于您被允许包含来自其他域的脚本,JSON-P是一种以javascript(而不是JSON)的形式传输数据的方式。您需要找到支持JSON-P的API(我不确定Translate API是否支持JSON-P),或者在与客户端应用程序相同的域上创建代理以访问JSON数据。
在此处阅读有关JSON-P协议的更多信息:http://json-p.org/
要创建代理,您需要实现一个获取Translate API内容并在响应中重新打印的服务。
实施例: / jsonProxy?文= FOO 应该返回http://translate.google.ru/translate_a/t?client=x&text=entertext&sl=en&tl=pl
的内容...但您不必从其他域访问它。
答案 2 :(得分:-1)
我认为响应的MIME类型应该是'application / json'