angular 使用$http.jsonp進行跨域訪問以及修改目標JSON

昨天把皮皮書屋的遺產書籍整理好了,做了個AngularJs 的SAP, 上傳到了阿里雲,

主要思路是使用把皮皮書屋的xls內容轉化成了JSON,然後用$http.get直接拿到數據,然後用ui-grid 展示,並且提供搜索功能。

本地一切都很好,工作很順利,可是上傳到阿里雲後發現IIS不認JSON, 會報未處理.JSON類型文件的錯誤,

要改正這個錯誤需要admin權限執行一些命令,

那算了吧,把JSON放在阿里雲存儲裏面吧,然後用$http.get拿,

這時候又報錯了,是無法跨域訪問, 這個簡單啊, 把$http.get換成$http.jsonp就可以了:

 $http.jsonp("http://ktom.com/pped2k.json?callback=JSON_CALLBACK")

.success(function (data) {
           ..

})
            .error(function (e) {
                console.log(e);
            });

callback=JSON_CALLBACK 是必須的, 完美,運行試試,爲啥沒有返回數據? DEBUG進去看看,發現沒有進入success, 一直都是進error.


繼續查,後來發現jsonp數據格式跟JSON不是以個東西,JSONP是帶CALLBACK執行的,所以需要更改一下我的JSON:


更改前是正常的: [{name:'ACB'},{'name:'cbd''}]

更改後是: angular.callbacks._0([{name:'ACB'},{'name:'cbd''}])


angular.callbacks._0 是啥呢?看你的$http.JSONP request, 在header中會發現是這樣子的:

  1. Request URL:
    http://ktom.com/pped2k.json?callback=angular.callbacks._0

原來的callback=JSON_CALLBACK 會被更改成angular.callbacks._0,angular.callbacks._0就是從這裏來的了

上傳文件,再次打開 http://kuaitom.com/ 測試,完美!!!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章