利用jquery.ajax()实现跨域
2015-08-04 18:52
701 查看
通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的。
jsonp是英文json with padding的缩写。它允许在服务器端生成script tags至返回至客户端,也就是动态生成javascript标签,通过javascript callback的形式实现数据读取。
前端代码如下:
[/code]服务器端代码如下:
开始以为,只要客户端通过jsonp就可以直接跨域访问,其实不然,需要服务器端的支持才行
[/code]首先在客户端注册一个callback (如:'jsoncallback'), 然后把callback的名字(如:success_jsonpCallback)传给服务器端对应的处理函数。
服务器先生成需要返回给客户端的 json 数据。然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数(jsoncallback)的值(success_jsonpCallback) 。
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并将服务器端返回的数据,作为参数,
传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里。
实际上跨域是通过动态增加script来加载数据,无法直接获得数据,所以需要使用回调函数。
来自为知笔记(Wiz)
jsonp是英文json with padding的缩写。它允许在服务器端生成script tags至返回至客户端,也就是动态生成javascript标签,通过javascript callback的形式实现数据读取。
前端代码如下:
$.ajax({
type:"get",
async:false,
url:"http://192.168.0.168:8080/lightview/filecentral/filePageNums.do?id=443d6058-8f2b-4caa-97c8-bdb542346745",
dataType:"jsonp",
jsonp:"jsoncallback",
jsonpCallback:"success_jsoncallback",
success:function(data){
document.getElementById("spanTotalPageNum").innerHTML = data.pageNums;
pageNumsMax = data.pageNums;
}
})
[/code]服务器端代码如下:
开始以为,只要客户端通过jsonp就可以直接跨域访问,其实不然,需要服务器端的支持才行
@RequestMapping(value = "filePageNums.do",produces = "text/plain;charset=UTF-8")
@ResponseBody
public String getFilePageNums(@RequestParam("id") String id,@RequestParam("jsoncallback") String callbackName){
if(id==null||id.trim().equalsIgnoreCase("")){
throw new NullPointerException();
}
FileScope fileScope=service.getFileById(id);
String result=callbackName+"("+"{\"pageNums\":\"";
if(fileScope==null){
result+="0";
}
else {
result+=String.valueOf(ViewFileAPI.viewFilePageNums(fileScope.getFileId()));
}
result+="\"})";
return result;
}
[/code]首先在客户端注册一个callback (如:'jsoncallback'), 然后把callback的名字(如:success_jsonpCallback)传给服务器端对应的处理函数。
服务器先生成需要返回给客户端的 json 数据。然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数(jsoncallback)的值(success_jsonpCallback) 。
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并将服务器端返回的数据,作为参数,
传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里。
实际上跨域是通过动态增加script来加载数据,无法直接获得数据,所以需要使用回调函数。
来自为知笔记(Wiz)
相关文章推荐
- jquery实现99乘法表的动态显示
- jQuery ajax异步处理 后台返回json/jsonArray数据
- JQuery循环取出checkbox选中的值
- JQuery选择器大全
- jquery实现密码强度检测
- 使用jquery-qrcode生成二维码
- jquery学习
- JQuery onload、ready概念介绍及使用方法
- jquery 提交表单
- jQuery实现Ajax应用加载(load/getJSON/getScript/get/post/serialize/ajax/ajaxSetup/ajaxStart/ajaxStop)
- jquery多个参数以及参数个数不一样的回调函数(使用hash对象)
- jQuery之日期选择器
- jQuery uploadify在谷歌和火狐浏览器下无法上传
- jQuery 两个select之间option的互相添加操作
- jquery学习之路 初识jquery!
- jQuery雷达扫描切换幻灯片代码
- Jquery的基本知识
- jQuery函数attr()与prop()的区别
- jquery控制显示服务器生成的图片流
- js、jquery遍历对象