關於部落格
- 一起墮落吧
  • 71744

    累積人氣

  • 5

    今日人氣

    0

    追蹤人氣

JSONP錯誤處理

當然如果要寫API,就是要做跨平台的系統,未來可以快速的將系統從Web轉移到手機上。 Web端的部分,想說用jquery的ajax去call api就好,結果當然就是遇到cross domain的問題,好在有JSONP這玩意兒可以解套。 一般ajax是透過XMLHttpRequest去非同步載入資料,但是當Request對象有跨網域時,瀏覽器就會基於令人費解的安全性原則把Request給擊落。但在Web x.0遭濫用的年代,跨網域的非同步javascript呼叫,跟台北市的計程車一樣常見(「令人費解的安全性原則」一詞就是這樣來的)。 恩?既然非同步的跨網域javascript呼叫會被瀏覽器檔下來,那為還這麼常見? 每個網站的API都有各自的解套方式,當然也有比較公用的解套方式,那就是JSONP的技術。JSONP一詞源自JSON(沒聽過JSON?如果你目前的工作與網站開發有關,那建議你考慮換一下工作or趕快去學一下JSON吧。官網:http://www.json.org/json-zh.html),全名為JSON with padding(資料來源:WIKI百科)。 如前述,一般的ajax request是透過XMLHttpRequest去呼叫某個網路資源,而JSONP則是一種透過..........漏洞.....去動態載入網路資源的方式。漏洞這個帽子好沉重阿,不過如果沒有比較完整的安全性規範,我還是覺得這是款漏洞。JSONP的原理就是透過在網頁中,動態插入一個<script>標籤,指定script網址,然後載回一段javascript來執行。應該大家都知道,網頁中的script,網址就算跨網域,也不會被瀏覽器的安全性給檔掉,JSONP就是透過這個漏洞來達到非同步呼叫網路資源的目的。 一般來說,ajax如果呼叫一個JSON資源,回傳的格式大概長的像這樣: { width: 100, height: 100 } 而JSONP回傳的格式則類似: myCallbackFunction({ width: 100, height: 100 }); 是的,因為JSONP是透過script來載入,因此內容必須長的像是一段javascript函式,否則會得到一個javascript的錯誤。而範例中的myCallbackFunction,必須是client端與server端協議的一個函式名稱,否則也會得到一個javascript錯誤。 恩?離題了,今天好像不是要講解JSONP的原理,不過男人只要到了一定的年紀,就會喜歡講古,大家忍耐一下...... well~~大家知道原理之後,回到正題,不對,回不到正題...「JSONP錯誤處理」如果大家是衝著這個標題進來看這篇文章,那看官應該要失望了。因為JSONP是透過script injection來載入資源,因此如果遇到404或是任何http exception,javascript是不會知道的,而且會把server端回傳的錯誤訊息當作一段javascript來執行。 目前google的結果,關於這部分好像還是無解,希望有哪位大德有解,懇請告知一下。 說完client端的部分,來提一下server端的部分,如果你正在開發、維護一個允許JSONP Request的API,請記得做好http exception handler,不論Response的東西為何,就算是404錯誤,也請把callback帶回來,因為client端真的很無助阿阿阿阿阿阿阿。
相簿設定
標籤設定
相簿狀態