jQuery之ajax的跨域获取数据
如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。意思就是远程服务端需要对返回的数据做下处理,根据客户端提交的callback的参数,返回一个callback(json)的数据,而客户端将会用script的方式处理返回数据,来对json数据做处理。JQuery.getJSON也同样支持jsonp的数据方式调用。下面演示关于jQuery处理跨域请求ajax的方式:
服务器端(PHP为例):
<?php
$data = array('name'=>' 张三','age'=>22,'city'=>'newYork');
sleep(3); //人为设置一个等待(用于观察什么是ajax的同步与异步)
responseAJAX($data); //响应请求返回数据 /**
* 返回处理后的ajax请求数据
* @author martinzhang
* @param $data 待返回的数据
* @return none
*/
function responseAJAX($data){
$data = json_encode($data);
$getCallBackName = $_REQUEST['callback']; //获取callback调用的function函数名
if($getCallBackName != ''){
//使用了jsonp跨域请求
$data = $getCallBackName.'('.$data.')'; //返回格式形如:callbackFunName({"name":" \u5f20\u4e09","age":22,"city":"newYork"})
die($data);
}else{
//未跨域
die($data);
}
}
客户端:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>jsonp跨域</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript" language="javascript" src="../jquery-1.8.2.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="button" id="btn1" onclick="BtnClick()" value="jsonp" style="width:55px; height:20px;" />
<input type="button" id="btn1" onclick="BtnClick2()" value="getJSON" style="width:55px; height:20px;" />
</div>
<p></p>
<div id="dd">
sd......
</div>
<div>
<script type="text/javascript" language="javascript">
//方式一:
function BtnClick() {
$.ajax({
url: 'http://others.com/0_module/0/jQuery/ajax_jsonp/serverAPI.php',
//async: false, //ture表示异步(默认);false表示同步;
type: 'get',
dataType : 'jsonp', //返回数据类型:需要显式指定
jsonp: 'callback', //服务端用于接收callback调用的function名的参数名(变量名)
//jsonpCallback: 'callbackFunName', //可以显式地指定callback的函数名【如果不设置此项jquery会使用一个随机的含时间串的名称做为callback的函数名】
success: function(data){
//alert(data);
$('#dd').html(data.name);
}
}); alert('什么是异步?就是js不会等ajax何时请求回数据,程序顺序向下执行它下面的其它程序,ajax何时候请求回数据就何时处理');
} //方式二:
function BtnClick2() {
$.ajaxSettings.async = false; //显式声明此次请求为同步
$.getJSON("http://others.com/0_module/0/jQuery/ajax_jsonp/serverAPI.php?callback=?",null,function(data){
$('#dd').html(data.name);
}); alert('何谓同步?就是必须等ajax请求回来数据之后,js才会顺序向下执行它下面的程序');
} </script>
</div>
</form>
</body>
</html>
jQuery之ajax的跨域获取数据的更多相关文章
- AJAX远程跨域获取数据
//本地获取json文件 $.ajax({ url : 'json.php', type : 'post', dataType : 'json',//返回json数据格式 success : func ...
- jQuery的Ajax的跨域请求
今天碰到一个Ajax跨域请求的问题,我把源码down下来,然后在服务器端写了一个http请求的代理(因为服务器端是不存在跨域问题的),说白了就是用BufferedReader写了个IO流,然后读取到目 ...
- jsonp跨域获取数据小解
jsonp跨域获取数据小解 由于浏览器有同源策略,所以要想获取非同源(协议,域名,端口三者有一不同都算非同源)的页面的数据,就得进行跨域 (1) jsonp原理 由于script标签的src属性可以访 ...
- 利用jquery的ajax实现跨域,内部其实是jsonp协议了,不是XHRhttp协议
一.同源策略 要理解跨域,先要了解一下“同源策略”.所谓同源是指,域名,协议,端口相同.所谓“同源策略“,简单的说就是基于安全考虑,当前域不能访问其他域的东西. 一些常见的是否同源示例可参照下表: 在 ...
- 利用location.hash+iframe跨域获取数据详解
前言 如果看懂了前文利用window.name+iframe跨域获取数据,那么此文也就很好理解了.一样都是动态插入一个iframe,然后把iframe的src指向服务端地址,而服务端同样都是输出一段j ...
- 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- XMLHTTPRequest对象不能跨域获取数据?!
写了一小段代码,是用XMLHTTPRequest对象来获取数据的,在本地服务器中,运行的很顺利,但是转向实际服务器(实质上就是转向http://gumball.wickedlysmart.com获取一 ...
- iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- jquery中ajax处理跨域的三大方式
一.处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问.但ie10以下不支持 只需要在服务端填上响应头: ? 1 2 ...
随机推荐
- ajax data数据里面传一个json到后台的写法
$.ajax({ url:url+"/crm/contact", type:'PUT', ...
- 跨域之-jquery操作
在JQ进行跨域的操作,用的是jsonp的方式,创建script标签,除了跨域的行为外,本地的操作方式都是xmlHttpRequest.
- CSS3实现背景颜色渐变
CSS3渐变色生成网站:http://gradients.glrzad.com/ 本文参考:前端设计之用CSS3做线性渐变效果http://webskys.com/css3/10.html 在CSS3 ...
- python requests库入门[转]
首先,确认一下: Requests 已安装 Requests是 最新的 让我们从一些简单的示例开始吧. 发送请求 使用Requests发送网络请求非常简单. 一开始要导入Requests模块: > ...
- HackerRank "Minimum Penalty Path"
It is about how to choose btw. BFS and DFS. My init thought was to DFS - TLE\MLE. And its editorial ...
- JavaScript中 Promise的学习以及使用
今天一个哥们发过来一段js代码,没看懂,就顺便学习了一下,代码如下 Promise.resolve('zhangkai').then(value => {console.log(value)} ...
- a+=b 是什么意思?
a+=b或者-=,*=等等就是相当于a=a+b;简写而已,没什么特殊含义此外还有a++/a--相当于a=a+1/a=a-1
- OpenJudge解题经验交流
1.1编程基础之输入输出01:Hello, World! 02:输出第二个整数PS:a,b需用longint类型接收 03:对齐输出 04:输出保留3位小数的浮点数 05:输出保留12位小数的浮点数 ...
- 手把手教你接口自动化测试 – SoapUI & Groovy
手把手教你接口自动化测试 – SoapUI & Groovy http://www.cnblogs.com/wade-xu/p/4236295.html 关键词:SoapUI接口测试,接口自动 ...
- J-Link clone问题
在上一篇<修复山寨版的J-Link>,中已经介绍了恢复的步骤. 但是,在使用J-Link驱动(V4.94J)升级后,会出现下面情况. The connected emulator is a ...