几种常用的ajax 跨域请求
前 言
首先,我们要明白,什么是跨域,为什么要跨域。 由于JS中存在同源策略。当请求不同协议名不同端口号下面的文件时,将会违背同源策略,无法请求成功!需要进行跨域处理!
这篇文章就为大家详细介绍一下个人常用的三种跨域方式,以请求PHP为例。
1header("Access-Control-Allow-Origin:*");
后台PHP进行设置,前台无需任何设置,在后台被请求的PHP文件中,写入一条header。表示允许哪些域名请求这个PHP文件,*表示所有域名都允许
eg:
前台:
$.post("http://localhost/lianxi/kuayu.php",function(data){
console.log(data);
})
后台:
header("Access-Control-Allow-Origin:*");
$str=<<<str [
{
"name": "zhangsan",
"age": 17,
"hobby": [
"吃",
"喝",
"玩",
"乐"
],
"score":{
"math":78,
"chinese":80
}
}
]
str;
echo $str;
前台返回:
2使用src属性+jsonp实现跨域
①用于src属性的标签自带跨域功能,所以可以使用script标签的src属性请求后台数据。
②由于src在加载数据成功后,会直接将加载内容放入到script标签中。所以后台直接返回JSON字符串不能在script标签中解析。因此,后台应该返回给前台一个回调函数,并将JSON字符串作为参数传入。
③前台就收到返回的回调函数,将直接在script标签中调用。因此需要声明这样一个回调函数,作为请求成功的回调。
jsonp:JSON with padding,是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。
前台:
<script type="text/javascript">
function callBack(data){
console.log(data);
}
</script>
<script type="text/javascript" src="http://localhost/lianxi/kuayu.php"></script>
后台:
header("Content-Type:text/html;charset=utf-8"); $str=<<<str [
{
"name": "zhangsan",
"age": 17,
"hobby": [
"吃",
"喝",
"玩",
"乐"
],
"score":{
"math":78,
"chinese":80
}
}, ]
str;
echo "callBack({$str})";
前台返回:
3JQuery的AJax实现JSONP
①在ajax请求时,设置dataType为"jsonp"
②后台返回时,依然需要返回回调函数名。但是ajax在发送请求时,会默认使用get请求回调函数名发给后台,后台可以使用$_GET['callback']取出回调函数名
echo "{$_GET['callback']}({$str})";
③后台返回以后,ajax依然可以用success作为成功的回调函数:
success:function(data){}
当然后台也可以随便返回一个回到函数名, echo "callBack({$json})"; 前台只要请求成功,就会自动调用这个函数。类似第二条的②③步
前台:
$.ajax({
type:"post",
url:"http://localhost/lianxi/kuayu.php",
dataType:"jsonp",
success:function(data){
console.log(data);
}
});
后台:
echo "{$_GET['callback']}({$str})";
前台返回:
以上就是本人常用的跨域方式,希望对各位读者有所帮助。欢迎批评、交流与沟通。
几种常用的ajax 跨域请求的更多相关文章
- ASP.NET MVC 实现AJAX跨域请求方法《1》
ASP.NET MVC 实现AJAX跨域请求的两种方法 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据 ...
- .Net Ajax跨域请求总结
导语 之前写过一篇文章Ajax跨域请求COOKIE无法带上的解决办法,这两天正好好好的查了一下相关知识,做来总结一下 一.传统 ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法 ...
- ASP.NET MVC 实现 AJAX 跨域请求
ASP.NET MVC 实现AJAX跨域请求的两种方法 和大家分享下Ajax 跨域的经验,之前也找了好多资料,但是都不行,后来看到个可行的修改了并测试下 果然OK了 希望对大家有所帮助! 通常发送 ...
- 解决ajax跨域请求 (总结)
ajax跨域请求,目前已用几种方法实现: 1)用原生js的xhr对象实现. var url="http://freegeoip.net/json/" ...
- $.ajax 跨域请求 Web Api
WepApi确实方便好用,没有配置文件,一个apicontroller直接可以干活了.但今天用$.ajax跨域请求的时候总是获取不到数据,用fiddler一看确实抓到了数据,但回到$.ajax函数中, ...
- jQuery ajax跨域请求的解决方法
在Ajax应用中,jQuery的Ajax请求是非常容易而且方便的,但是初学者经常会犯一个错误,那就是Ajax请求的url不是本地或者同一个服务器下面的URI,最后导致虽然请求200,但是不会返回任何数 ...
- Ajaxadr ajax跨域请求crossdomain
最近工作需要用到ajax跨域请求参数,网上找很很久,最终得到解决之道.分享一下吧,希望能帮到各位 也许你已经发现在浏览器直接敲路径能获得对方提供接口的参数,而一到项目中Ajax请求却老是失败.原因是, ...
- ajax跨域请求的解决方案
一直打算改造一下自己传统做网站的形式. 我是.Net程序员,含辛茹苦数年也没混出个什么名堂. 最近微信比较火, 由于现在大环境的影响和以前工作的总结和经验,我打算自己写一个数据,UI松耦合的比较新潮的 ...
- 本地主机作服务器解决AJAX跨域请求访问数据的方法
近几天学到ajax,想测试一下ajax样例,由于之前在阿里租用的服务器过期了,于是想着让本地主机既做服务器又做客户端,只是简单地测试,应该还行. 于是,下载了xampp,下载网址http://www. ...
随机推荐
- 翻译:MLAPP(2.2节 概率论简要回顾)
笔者:尝试翻译MLAPP(Machine Learning: a Probabilistic Perspective)一书,供机器学习的学者参考,如有错误理解之处请指出,不胜感激!(如需转载,请联系本 ...
- MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...
- Weave Scope 容器地图 - 每天5分钟玩转 Docker 容器技术(80)
Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解.监控和控制容器.千言万语不及一张图,先感受一下. 下面开始实践 Weave Scope. 安装 执行如 ...
- selenium 调用键盘按键
1.想要调用键盘按键操作需要引入keys包: from selenium.webdriver.common.keys import keys 通过send_keys() 调用按键 send_keys( ...
- 使用dropload.js插件进行下拉刷新
移动端的下拉刷新是一个比较常见的功能了,网上也有很多框架,插件都有这种功能,所以直接拿来用就好了. html代码: <!--选项卡--><div class="tab&qu ...
- BeginInvoke()使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- win10 uwp 截图 获取屏幕显示界面保存图片
本文主要讲如何保存我们的屏幕显示的,保存为图片,也就是截图,截我们应用显示的. UWP有一个功能,可以截图,RenderTargetBitmap 我们首先写一个Grid,我们需要给他名字,我这里给他S ...
- UVa12325, Zombie's Treasure Chest
反正书上讲的把我搞得晕头转向的,本来就困,越敲越晕...... 转网上一个大神写的吧,他分析的很好(个人感觉比书上的清楚多了) 转:http://blog.csdn.net/u010536683/ar ...
- Java打印常见图形
package org.other; import java.util.Scanner; /* * 题目:打印常用图形逻辑 */ public class Ninthninth { public st ...
- 成为一名Java高级工程师你需要学什么
宏观上: 1.技术广度方面至少要精通多门开源技术吧,研究过struts\spring等的源码.2.项目经验方面从头到尾跟过几个大项目,头是指需求阶段,包括需求调研.尾是指上线交付之后,包括维护阶段.3 ...