有人可以向我解釋這個解析函數的實際工作原理嗎?解析JSON函數
function parseFlickrJson(jsonstring){
var data=null;
var jsonFlickrApi=function(d){
data = d;
}
eval(jsonstring);
return data;
}
有人可以向我解釋這個解析函數的實際工作原理嗎?解析JSON函數
function parseFlickrJson(jsonstring){
var data=null;
var jsonFlickrApi=function(d){
data = d;
}
eval(jsonstring);
return data;
}
JSON實際上是有效的JavaScript。所以你需要'解碼'它,就是評估它爲JavaScript(因此是eval
)。它還使用了被稱爲JSONP http://en.wikipedia.org/wiki/JSONP的地方,其中不僅僅返回了JSON。
JSONP基本上是包裝在函數調用中的JSON。一個JSONP響應的內容可能是:
parseResponse({"Name": "Cheeso", Id : 1823, "Rank": 7})
這意味着,當你評估JSONP,它將嘗試調用一個函數(在本例中parseResponse
和你的情況jsonFlickrApi
)。這就是爲什麼jsonFlickrApi
函數必須在eval(jsonstring)
發生之前定義的原因。
Upvoting只是爲了好玩:) – powtac 2011-03-31 22:59:27
so var jsonFlickrApI不僅僅是一個自定義變量,而是一個實際存在的'事物'? (對不起,這聽起來有點無知......我主要用於Java) – raoulbia 2011-03-31 23:12:48
'var jsonFlickrApi = function(d)...'實際上是創建一個匿名函數並將其引用存儲在'jsonFlickrApi'中所以我想這不是真正的匿名)。 'eval'評估一個字符串,就好像它是源代碼一樣。由於來自Flickr API的響應包含對「jsonFlickrApi」的調用,因此該函數實際存在非常重要,否則您將得到一個異常。 – 2011-03-31 23:19:13
是嗎?它來自哪裏? – 2011-03-31 22:58:10