28
據我所知,jsonp是一種繞過同一起源策略的技術。您基本上是在腳本標記中引用您的json服務服務器端點,因爲腳本標記不受SO策略的限制。JSONP是否需要修改服務器?
我的問題是:假設一個服務器有一個提供json的端點,服務器上是否需要修改以便在客戶端使用jsonp?
我覺得沒什麼,但要確保....
據我所知,jsonp是一種繞過同一起源策略的技術。您基本上是在腳本標記中引用您的json服務服務器端點,因爲腳本標記不受SO策略的限制。JSONP是否需要修改服務器?
我的問題是:假設一個服務器有一個提供json的端點,服務器上是否需要修改以便在客戶端使用jsonp?
我覺得沒什麼,但要確保....
沒錯,JSONP略有不同,當它呈現,讓您的服務器需要支持它。
JSON看起來是這樣的:
{ "name": "value" }
而JSONP是這樣的:
functionName({ "name": "value" });
如果無論你使用它,你會覆蓋支持,但它是不一樣的只是支持JSON。當服務器收到一個請求,例如:http://example.com/json?callback=functionName
,上面是你應該呈現什麼樣的,因爲它的外觀在頁面是這樣的:
<script type="text/javascript" src="http://example.com/json?callback=functionName"></script>
這意味着運行需要返回的東西,作爲一個例證,這是有效的:
<script type="text/javascript">
functionName({ "name": "value" });
</script>
如果您的服務器沒有支持JSONP這將有效地是這樣的:
<script type="text/javascript">
{ "name": "value" }
</script>
...你會得到語法錯誤,因爲這不是有效的JavaScript。
和你的js代碼必須實現functionName?是否需要評估json以獲取js對象? – hvgotcodes 2010-07-21 01:37:33
@hvgotcodes - 是的,客戶端具有該功能(例如jQuery默認創建一個動態)。它是傳遞給函數的JSON(JSON是有效的對象文字符號,只是它的一個子集),所以不需要執行'eval()'。 – 2010-07-21 01:40:05
我不明白你爲什麼不需要評估它。不管jsonp,大多數js庫都不會評估通過xhrs返回的json來獲取json代表的實際js對象嗎? – hvgotcodes 2010-07-21 01:44:01