前 言

首先,我们要明白,什么是跨域,为什么要跨域。 由于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 跨域请求的更多相关文章

  1. ASP.NET MVC 实现AJAX跨域请求方法《1》

    ASP.NET MVC 实现AJAX跨域请求的两种方法 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据 ...

  2. .Net Ajax跨域请求总结

    导语 之前写过一篇文章Ajax跨域请求COOKIE无法带上的解决办法,这两天正好好好的查了一下相关知识,做来总结一下 一.传统 ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法 ...

  3. ASP.NET MVC 实现 AJAX 跨域请求

    ASP.NET MVC 实现AJAX跨域请求的两种方法 和大家分享下Ajax 跨域的经验,之前也找了好多资料,但是都不行,后来看到个可行的修改了并测试下 果然OK了   希望对大家有所帮助! 通常发送 ...

  4. 解决ajax跨域请求 (总结)

    ajax跨域请求,目前已用几种方法实现:   1)用原生js的xhr对象实现.                var url="http://freegeoip.net/json/" ...

  5. $.ajax 跨域请求 Web Api

    WepApi确实方便好用,没有配置文件,一个apicontroller直接可以干活了.但今天用$.ajax跨域请求的时候总是获取不到数据,用fiddler一看确实抓到了数据,但回到$.ajax函数中, ...

  6. jQuery ajax跨域请求的解决方法

    在Ajax应用中,jQuery的Ajax请求是非常容易而且方便的,但是初学者经常会犯一个错误,那就是Ajax请求的url不是本地或者同一个服务器下面的URI,最后导致虽然请求200,但是不会返回任何数 ...

  7. Ajaxadr ajax跨域请求crossdomain

    最近工作需要用到ajax跨域请求参数,网上找很很久,最终得到解决之道.分享一下吧,希望能帮到各位 也许你已经发现在浏览器直接敲路径能获得对方提供接口的参数,而一到项目中Ajax请求却老是失败.原因是, ...

  8. ajax跨域请求的解决方案

    一直打算改造一下自己传统做网站的形式. 我是.Net程序员,含辛茹苦数年也没混出个什么名堂. 最近微信比较火, 由于现在大环境的影响和以前工作的总结和经验,我打算自己写一个数据,UI松耦合的比较新潮的 ...

  9. 本地主机作服务器解决AJAX跨域请求访问数据的方法

    近几天学到ajax,想测试一下ajax样例,由于之前在阿里租用的服务器过期了,于是想着让本地主机既做服务器又做客户端,只是简单地测试,应该还行. 于是,下载了xampp,下载网址http://www. ...

随机推荐

  1. 翻译:MLAPP(2.2节 概率论简要回顾)

    笔者:尝试翻译MLAPP(Machine Learning: a Probabilistic Perspective)一书,供机器学习的学者参考,如有错误理解之处请指出,不胜感激!(如需转载,请联系本 ...

  2. MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据

    记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...

  3. Weave Scope 容器地图 - 每天5分钟玩转 Docker 容器技术(80)

    Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解.监控和控制容器.千言万语不及一张图,先感受一下. 下面开始实践 Weave Scope. 安装 执行如 ...

  4. selenium 调用键盘按键

    1.想要调用键盘按键操作需要引入keys包: from selenium.webdriver.common.keys import keys 通过send_keys() 调用按键 send_keys( ...

  5. 使用dropload.js插件进行下拉刷新

    移动端的下拉刷新是一个比较常见的功能了,网上也有很多框架,插件都有这种功能,所以直接拿来用就好了. html代码: <!--选项卡--><div class="tab&qu ...

  6. BeginInvoke()使用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  7. win10 uwp 截图 获取屏幕显示界面保存图片

    本文主要讲如何保存我们的屏幕显示的,保存为图片,也就是截图,截我们应用显示的. UWP有一个功能,可以截图,RenderTargetBitmap 我们首先写一个Grid,我们需要给他名字,我这里给他S ...

  8. UVa12325, Zombie's Treasure Chest

    反正书上讲的把我搞得晕头转向的,本来就困,越敲越晕...... 转网上一个大神写的吧,他分析的很好(个人感觉比书上的清楚多了) 转:http://blog.csdn.net/u010536683/ar ...

  9. Java打印常见图形

    package org.other; import java.util.Scanner; /* * 题目:打印常用图形逻辑 */ public class Ninthninth { public st ...

  10. 成为一名Java高级工程师你需要学什么

    宏观上: 1.技术广度方面至少要精通多门开源技术吧,研究过struts\spring等的源码.2.项目经验方面从头到尾跟过几个大项目,头是指需求阶段,包括需求调研.尾是指上线交付之后,包括维护阶段.3 ...