[ 转 ]jquery的ajax和getJson跨域获取json数据
来源:互联网 发布:数控车床编程教学 编辑:程序博客网 时间:2024/06/04 23:29
目前浏览器端跨域访问常用的两种方法有两种:
1、通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的。
jsonp是英文json with padding的缩写。它允许在服务器端生成script tags至返回至客户端,也就是动态生成javascript标签,通过javascript callback的形式实现数据读取.
html代码:
1 //首先要引入jquery的js包 2 jQuery(document).ready(function(){ 3 $.ajax({ 4 type : "get", //jquey是不支持post方式跨域的 5 async:false, 6 url : "http://api.taobao.com/apitools/ajax_props.do", //跨域请求的URL 7 dataType : "jsonp", 8 //传递给请求处理程序,用以获得jsonp回调函数名的参数名(默认为:callback) 9 jsonp: "jsoncallback",10 //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名11 jsonpCallback:"success_jsonpCallback",12 //成功获取跨域服务器上的json数据后,会动态执行这个callback函数13 success : function(json){ 14 //do something when sucess15 }16 });17 });
服务端php:
1 $jsonp=$_GET['callback'];2 $output=$jsonp.'({"name":"value",.....})';3 exit($output);
jsonp的原理:
首先在客户端注册一个callback (如:'jsoncallback'), 然后把callback的名字(如:success_jsonpCallback)传给服务器端对应的处理函数。
服务器先生成需要返回给客户端的 json 数据。然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数(jsoncallback)的值(success_jsonpCallback) 。
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并将服务器端返回的数据,作为参数,
传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里。
实际上跨域是通过动态增加script来加载数据,无法直接获得数据,所以需要使用回调函数。
2.使用jquery的getJson进行跨域读取数据
实际上getJson方式的根本原理和ajax使用jsonp的方式是一样的。
jquery中常用getJson来调用获取远程的数据,并通过json格式返回。函数的原型如下:
参数
描述
url
必需。规定将请求发送的哪个 URL。
data
可选。规定连同请求发送到服务器的数据。
success(data,status,xhr)
可选。规定当请求成功时运行的函数。
额外的参数:
- response - 包含来自请求的结果数据
- status - 包含请求的状态
- xhr - 包含 XMLHttpRequest 对象
该函数是简写的ajax函数,实际上等价于:
1 jQuery.getJSON(url,data,success(data,status,xhr))
下面我们来看如何使用getJson跨域获取数据。
html页面示例代码:
1 $(function(){ $("#ww").click(function(){ $.getJSON("http://zenphoto.1youku.org/zp-core/getimg1.php?&cid=257&square=9&jsoncallback=?", function (result) { alert(result.img_url); } ); }); });
执行原理:
发送请求时需要传一个callback的回调函数名到服务器端,服务器端拿到这个回调函数名,再将返回数据用参数的形式反回到客户端,这样客户端就能够调到。
所以发送请求URL的地址后面一定要上jsoncallback=?这样的参数,jquery会将?号自动替换成自动生成的回调函数的名称。
所以最终的实际请求为:http://api.taobao.com/apitools/ajax_props.do&jsoncallback=jsonp1322444422697
所以和ajax的方式想比较,也就是callback函数一个是自动生成的函数名,一个是手工指定的函数名。
- jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据
- [ 转 ]jquery的ajax和getJson跨域获取json数据
- jquery的ajax和getJson跨域获取json数据的实现方法
- jquery的ajax和getJson跨域获取json数据的实现方法
- IT忍者神龟之jquery的ajax和getJson跨域获取json数据
- JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
- Jquery Ajax和getJSON获取后台普通Json数据和层级Json数据解析
- Jquery Ajax和getJSON获取后台普通Json数据和层级Json数据解析
- jQuery 使用 $.getJSON() 跨域获取 JSON 数据
- jQuery 使用 $.getJSON() 跨域获取 JSON 数据
- C语言 二维数组下标为变量的初始化方法
- ejabberd集群
- ubuntu14.04LTS下创建Qt5.4.1桌面快捷方式
- sizeof用法
- 总结键盘
- [ 转 ]jquery的ajax和getJson跨域获取json数据
- zookeeper和dubbo的结合示例
- 关于<c:forEach>取得集合数量的问题
- Target runtime
- C++ COM编程之QueryInterface函数(一)
- 所有iOS设备的屏幕分辨率
- 字符串指针与字符数组的区别
- mysql "1067"错误解决
- linux系统-软件包管理-源代码包安装