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/ 测试,完美!!!



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