AngularJS中$http.jsonp跨域请求问题
2015-11-25 17:58
309 查看
1、angularjs的jsonp请求,其请求url后面必须加上JSON_CALLBACK
如:“http://localhost:8080/angularjs/json/phone.json?callback=JSON_CALLBACK”
2、callback=JSON_CALLBACK 是指指定回调函数的名称为JSON_CALLBACK ,这个名称在AngularJS发出请求时,会自动将JSON_CALLBACK替换成一个唯一的函数名,比如:"callback=angular.callbacks._0",这个可以通过浏览器debug模式查看.
我请求的url为“http://localhost:8080/angularjs/json/phone.json?callback=JSON_CALLBACK”
3、比较重要的,你的返回数据必须放在JSON_CALLBACK (json数据)里面。
注意:JSON_CALLBACK 必须是angularjs把你的JSON_CALLBACK
替换后的值,如:angular.callbacks._0,假设你请求到后台,你可以先获取到callback这个参数的值,然后把组装你要返回的json数据。
eg:
假设是SpringMVC
String callback = request.getParameter("callback");
JSONObject json =new
JSONObject();
json.put("id", "123456");
json.put("username", "hhaip");
json.put("age", 25);
json.put("sex", "男");
return
callback+"("+json+")";
//返回的json格式和下面我的例子一样
我请求的是一个.json文件,在tomcat里面直接新建了一个文件夹,里面放了一个.json文件,该文件里存放了json格式的数据,如下:
angular.callbacks._0([ //angular.callbacks._0不能写成JSON_CALLBACK
{
"id":"00001",
"name":"Nexus S",
"snippet":"Fast just got faster with Nexus S.",
"age":12,
"address":"江西九江"
},
{
"id":"00002",
"name":"Motorola XOOM™ with Wi-Fi",
"snippet":"The Next, Next Generation tablet.",
"age":21,
"address":"江西南昌"
},
{
"id":"00003",
"name":"MOTOROLA XOOM™",
"snippet":"The Next, Next Generation tablet.",
"age":22,
"address":"江西丰城"
}
,
{
"id":"00004",
"name":"一加X",
"snippet":"一加最新的一款轻期旗舰手机",
"age":19,
"address":"江西赣州"
}
,
{
"id":"00005",
"name":"锤子手机",
"snippet":"东半球最好用的手机",
"age":13,
"address":"江西上饶"
}
,
{
"id":"00006",
"name":"iphone 6s",
"snippet":"苹果6plus手机",
"age":18,
"address":"江西宜春"
}
])
4、$http.jsonp是向服务器发送请求,所以你不能直接就访问非服务器里的文件,那样会报错。
(1). 可以在tomcat的webapps文件夹里新建一个文件夹,里面放一个文件如:data.json,这样就是一个项目了。
(2). 然后启动你的tomcat,就启动服务了,数据就在服务器里。
(3). 请求的url可以写成http://localhost:8080/文件夹名/data.json?callback=JSON_CALLBACK
此博文为原创,转载请注明出处
如:“http://localhost:8080/angularjs/json/phone.json?callback=JSON_CALLBACK”
2、callback=JSON_CALLBACK 是指指定回调函数的名称为JSON_CALLBACK ,这个名称在AngularJS发出请求时,会自动将JSON_CALLBACK替换成一个唯一的函数名,比如:"callback=angular.callbacks._0",这个可以通过浏览器debug模式查看.
我请求的url为“http://localhost:8080/angularjs/json/phone.json?callback=JSON_CALLBACK”
3、比较重要的,你的返回数据必须放在JSON_CALLBACK (json数据)里面。
注意:JSON_CALLBACK 必须是angularjs把你的JSON_CALLBACK
替换后的值,如:angular.callbacks._0,假设你请求到后台,你可以先获取到callback这个参数的值,然后把组装你要返回的json数据。
eg:
假设是SpringMVC
String callback = request.getParameter("callback");
JSONObject json =new
JSONObject();
json.put("id", "123456");
json.put("username", "hhaip");
json.put("age", 25);
json.put("sex", "男");
return
callback+"("+json+")";
//返回的json格式和下面我的例子一样
我请求的是一个.json文件,在tomcat里面直接新建了一个文件夹,里面放了一个.json文件,该文件里存放了json格式的数据,如下:
angular.callbacks._0([ //angular.callbacks._0不能写成JSON_CALLBACK
{
"id":"00001",
"name":"Nexus S",
"snippet":"Fast just got faster with Nexus S.",
"age":12,
"address":"江西九江"
},
{
"id":"00002",
"name":"Motorola XOOM™ with Wi-Fi",
"snippet":"The Next, Next Generation tablet.",
"age":21,
"address":"江西南昌"
},
{
"id":"00003",
"name":"MOTOROLA XOOM™",
"snippet":"The Next, Next Generation tablet.",
"age":22,
"address":"江西丰城"
}
,
{
"id":"00004",
"name":"一加X",
"snippet":"一加最新的一款轻期旗舰手机",
"age":19,
"address":"江西赣州"
}
,
{
"id":"00005",
"name":"锤子手机",
"snippet":"东半球最好用的手机",
"age":13,
"address":"江西上饶"
}
,
{
"id":"00006",
"name":"iphone 6s",
"snippet":"苹果6plus手机",
"age":18,
"address":"江西宜春"
}
])
4、$http.jsonp是向服务器发送请求,所以你不能直接就访问非服务器里的文件,那样会报错。
(1). 可以在tomcat的webapps文件夹里新建一个文件夹,里面放一个文件如:data.json,这样就是一个项目了。
(2). 然后启动你的tomcat,就启动服务了,数据就在服务器里。
(3). 请求的url可以写成http://localhost:8080/文件夹名/data.json?callback=JSON_CALLBACK
此博文为原创,转载请注明出处
相关文章推荐
- 一次完整的Http请求过程
- 使用nginx搭建https服务器(转)
- Xcode7 使用NSURLSession发送HTTP请求的问题
- OkHttp完全解析(十)源码解析三
- 协议森林15 先生,要点单吗? (HTTP协议概览)
- OkHttp完全解析(九)源码解析二
- OkHttp完全解析(八)源码解析一
- OkHttp完全解析(七)SPDY协议详细介绍
- OkHttp完全解析(六)拦截器
- 神经网络(4)---神经网络是如何帮助我们学习复杂的nonlinear hypotheses
- [连载]《C#通讯(串口和网络)框架的设计与实现》-4.设备驱动管理器的设计
- OkHttp完全解析(五)HTTPS
- Linux TCP服务端接收连接数量突破65535的方法
- OkHttp完全解析(四)连接Connections
- http server与tomcat的区别
- OkHttp完全解析(三)并发
- OkHttp完全解析(一)OkHttp简介
- HTTP服务器响应状态信息
- java 实现https请求
- Https(SSL/TLS)原理详解