2012-11-05 56 views
0

我使用Goo.gl URL縮短器來縮短鏈接。我的sed是一個JSON字符串,並將其返回這樣它獲取存儲在xmlHttp.response結果:如何讓JSON成功解析XMLHttpRequest字符串?

"{ 
"kind": "urlshortener#url", 
"id": "http://goo.gl/mR2d", 
"longUrl": "http://google.com/" 
}" 

發送代碼後,我嘗試分析它使用JSON:

xmlHttp.send(jsonStr); 
var short_url = JSON.parse(xmlHttp.response).id ; 

此代碼在功能運行時,我得到錯誤下面的「輸入意外結束」:

getShortURL("http://google.com"); 
SyntaxError: Unexpected end of input 
arguments: Array[0] 
get message: function() { [native code] } 
get stack: function() { [native code] } 
set message: function() { [native code] } 
set stack: function() { [native code] } 
type: "unexpected_eos" 
__proto__: Error 

我原以爲可能有一些問題與字符串中的引號。什麼是解決問題的好方法?

+0

你的意思是:VAR SHORT_URL = JSON.parse(xmlHttp.response.id); 確實eval()的工作? –

+2

JSON周圍沒有真正的引號,是嗎?請發佈一個實際的響應,我不能相信這是無效的JSON – Bergi

+0

你不能用普通的JavaScript做到這一點,因爲調用谷歌的服務需要一個職位,他們不支持JSONP。 – epascarello

回答

1

我想我意識到什麼是錯的。代碼試圖在XMLHttpRequest實際上有任何內容之前從XMLHttpRequest獲取信息。需要等到xmlHttp.onreadystatechange和xmlHttp.readyState == 4,然後取出縮短的URL。然後可以在需要的地方發送。

(沒有使用這些類型的異步問題...)

0

JSON: why are forward slashes escaped?

我的猜測是,也許你正在使用的JSON解析器期待正斜槓進行轉義。看看這個輸入是否被接受:

{ 
    "kind": "urlshortener#url", 
    "id": "http:\/\/goo.gl\/mR2d", 
    "longUrl": "http:\/\/google.com\/" 
}