ajax跨域2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax跨域2相关的知识,希望对你有一定的参考价值。

接着昨天的写,写到关于解决跨域的问题,跨域这个名词,大家搜搜百度百科,里面有详细的介绍,我在这里就不赘述了

好在这里我来讲下关于jsonp的问题,jsonp解决跨域有两种该方案可选,1.原生js解决  2.jquery jsonp解决

下面我通过原生js来介绍下关于jsonp的原理,

客户端

function abc(data){
    console.log(data.data);
    var json =JSON.parse(data.data.lists[0])
    console.log(json);
}
<script src="test.php?callback=abc&key=123"></script>

 

服务端

<?php
  $callback = $_GET[‘callback‘];
  $txt = $_GET[‘key‘];
//逻辑处理根据自身业务来下
  echo $callback.‘(’.$txt.‘)’;
?>

这里我们来分析下上面的代码的意思,首先在客户端我们通过script标签,标签的src属性设置为我们要获取数据的地址,这样会帮我们吧数据从服务器拿到,

接着我们来分析服务器端的代码,服务器端根据传过来的querystring来得到一个键为callback的值和键位key的值,得到$callback=abc,$txt=123,最后返回给客户端abc(123),

接着客户端通过srcipt标签就拿到了abc(123),这里细心的朋友可能注意到了,我们刚好定义了一个abc()的函数,所以这时会去调用abc(data)这样我们就获取了服务端传过来的真实数据。这既是jsonp的原理(各位勿喷,这就是我自己的理解,不是直接copy过来的,所以可能有些概念不是那么严谨)

当然,如果每次都这样去获取,还是有点麻烦的,所以jquery中ajax给我们提供了更为简洁的方法


这里只需将dataType指定为jsonp就可以了,效果和上面一样

 

那么经过这样,我们已经可以通过跨域获取数据了,通过这种方式我们就可以拿到音乐数据了,感兴趣的朋友,自己可以尝试下去,在这里我就不说后面的具体细节了,得到了数据,其他都可以解决。

后话:这个音乐播放的案例是我6月份没事的是哦吼,做的玩下的,最开始不知道跨域这个问题,走了很多弯路,你并且我的第一个解决方案不是这样做的,我的第一个解决方案是用.net做后台去请求url,获得的数据中用字符串的处理办法,去除掉含有calllback()的字符,然后前端再去请求ashx,这样做你就要自己部署服务端,吧前端页面放在同一域下

 


以上是关于ajax跨域2的主要内容,如果未能解决你的问题,请参考以下文章

前端Jquery-Ajax跨域请求,并携带cookie

PHP中运用jQuery的Ajax跨域调用实现代码

springmvc用@crossorigin解决跨域 ajax怎么写

ajax跨域例子

jQuery跨域ajax:执行时回调

如何发送跨域ajax请求[重复]