码迷,mamicode.com
首页 > Web开发 > 详细

几种常用的ajax 跨域请求

时间:2017-11-12 11:15:07      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:span   使用   access   set   声明   前台   mat   alt   .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 跨域请求

标签:span   使用   access   set   声明   前台   mat   alt   .ajax   

原文地址:http://www.cnblogs.com/ljr001/p/7821008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!