2011-12-08 260 views
1

我有网址http://translate.google.ru/translate_a/t?client=x&text=enter text&sl=en&tl=pl我不能处理响应JSONP请求

如果你将通过在响应这个链接,你将有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 

我该如何处理此响应?

回答

1

我想你应该看看thishttp://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"); 
      } 
     } 
    } 
} 
+0

我认为这不会比OP的现有解决方案更好。 –

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(我不确定翻译API是否支持JSON-P),或者在与客户端应用程序相同的域上创建代理以访问JSON数据。

了解更多关于JSON-P协议在这里:http://json-p.org/

创建一个代理,你需要实现获取的翻译API的内容的服务,并在响应重新打印。

例子: /jsonProxy文本= foo的 应返回http://translate.google.ru/translate_a/t?client=x&text=entertext&sl=en&tl=pl

内容...但你将不必从其他域访问它?

+0

你能提供有关库的详细信息,我可以用吗? –

-1

我觉得MIME类型的反应应该是“应用/ JSON的”