JQuery的Ajax跨域请求原理概述及实例


Posted in Javascript onApril 26, 2013

今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发
JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式。分别是JQuery的 jquery.ajax jsonp格式和jquery.getScript方式。

什么是jsonp格式呢?API原文:如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。意思就是远程服务端需要对返回的数据做下处理,根据客户端提交的callback的参数,返回一个callback(json)的数据,而客户端将会用script的方式处理返回数据,来对json数据做处理。JQuery.getJSON也同样支持jsonp的数据方式调用。

客户端JQuery.ajax的调用代码示例:

$.ajax({ 
type : "get", 
async:false, 
url : "http://www.xxx.com/ajax.do", 
dataType : "jsonp", 
jsonp: "callbackparam",//服务端用于接收callback调用的function名的参数 
jsonpCallback:"success_jsonpCallback",//callback的function名称 
success : function(json){ 
alert(json); 
alert(json[0].name); 
}, 
error:function(){ 
alert('fail'); 
} 
});

服务端返回数据的示例代码:
public void ProcessRequest (HttpContext context) { 
context.Response.ContentType = "text/plain"; 
String callbackFunName = context.Request["callbackparam"]; 
context.Response.Write(callbackFunName + "([ { name:\"John\"}])"); 
}
Javascript 相关文章推荐
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
javascript 异常处理使用总结
Jun 21 Javascript
javascript 进度条 实现代码
Jul 30 Javascript
js内置对象 学习笔记
Aug 01 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
Dec 17 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
JQuery Mobile实现导航栏和页脚
Mar 09 Javascript
基于javascript实现简单的抽奖系统
Apr 15 Javascript
jQuery如何解决IE输入框不能输入的问题
Oct 08 Javascript
JavaScript随机生成颜色的方法
Oct 15 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 #Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
Apr 26 #Javascript
基于jquery中children()与find()的区别介绍
Apr 26 #Javascript
基于jQuery选择器的整理集合
Apr 26 #Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
Apr 26 #Javascript
Javascript计算两个marker之间的距离(Google Map V3)
Apr 26 #Javascript
jquery中.add()的使用分析
Apr 26 #Javascript
You might like
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
js解决movebox移动问题
2016/03/29 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
Vue自定义指令详解
2017/07/28 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
centos6.4下python3.6.1安装教程
2017/07/21 Python
pandas的qcut()方法详解
2019/07/06 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
举例讲解Python装饰器
2020/12/24 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
某个公司的Java笔面试题
2016/03/11 面试题
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
Linux如何为某个操作添加别名
2013/03/01 面试题
工作人员思想汇报
2014/01/09 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
40岁生日感言
2014/02/15 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
客户答谢会致辞
2015/01/20 职场文书
2015年助残日活动总结
2015/03/27 职场文书
MYSQL 表的全面总结
2021/11/11 MySQL