2011-12-08 487 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的」