美文网首页
JSONP技术解决跨域问题

JSONP技术解决跨域问题

作者: Goorln | 来源:发表于2017-11-08 21:50 被阅读0次

JSONP技术解决跨域问题

官方解释:

JSONP是一个非官方的协议,它允许在服务器端集成script tags返回至客户端,通过javascript callback回调函数的形式实现跨域访问。

    概括:JSONP技术就是解决跨域问题的。

    跨域:只有JavaScript中的ajax访问其他域名的PHP文件才会跨 域,后台之间互相访问是不 
    跨域的,但是后台PHP文件一般是访问不到的。

解决思路:

一般像图片的路径<img src="" />都是可以访问到图片的,那么我们可以用src的属性。

实现跨域的方案有:

  1. 使用JSONP动态创建script标签,增加src属性。

  2. 在PHP文件服务器端写三个header头部,这种方法不建议使用,它会使服务器端信息不安全。

    header("Access-Control-Allow-Origin: *"); // 允许所有发起的跨域请求  
         //如果需要设置允许所有域名发起的跨域请求,可以使用通配符 *  
    header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求  
    header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With');
    
  3. 配置服务器反向代理,简单来说,就是用自己的HTML文件访问自己的PHP文件,再通过自己的PHP文件去访问其他的PHP文件。

这里对第一种方案进行说明:

 1. demo.html
                                             
        <!DOCTYPE html>
        <meta charset="UTF-8">
        <title>使用JSONP+JSON返回大批量数据</title>
        <script src="myajax.js"></script>
        </head>
        <body>
        <input type="button" id='btnok' value='Ajax跨域请求' />
        <hr />
        <div id='result'></div>
        <script>
        $('btnok').onclick = function () {
            var sc = document.createElement('script');
            sc.src = "http://www.test.com/demo.php?fn=callback";
            document.getElementsByTagName('head')[0].appendChild(sc);
        }
        function callback(msg){
            for(var i=0;i<msg.length;i++){
                var id = msg[i].id;
                var name = msg[i].username;
                $('result').innerHTML += 'id是:'+id+' 名字是:'+name+'<hr />';
            }
        }
        </script>
        </body>
        </html>


2. demo.php (这个文件可以放在别的域名下)
  
        <?php
        //1、接收fn参数
        $fn = $_GET['fn']; //callback
        //2、连接数据库
        mysql_connect('localhost','root','');
        mysql_query('use abc');
        mysql_query('set names utf8');
        //3、定义sql语句
        $sql = "select id,username from admin";
        //4、执行sql语句
        $res = mysql_query($sql);
        //5、定义一个空数组
        $data = array();
        //6、遍历结果集
        while($row = mysql_fetch_assoc($res)) {
            $data[] = $row;
        }
        //7、使用json_encode对数据进行转码操作
        $str = json_encode($data);
        //8、拼接数据callback([{},{},{}])
        echo $fn."($str)";

结果展示:

image

相关文章

  • 解决ajax跨域问题

    Jsonp解决ajax跨域问题 CORS解决ajax跨域问题

  • ajax跨域请求

    ajax跨域请求(jsonp) 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案JSONP jQue...

  • Flask-cors跨域

    什么是跨域 为什么要考虑跨域问题 同源策略 解决跨域问题 方式一: 使用 JSONP (一种非Ajax技术,需要前...

  • 跨域访问

    参考文献:jsonp解决跨域问题 . cors解决跨域问题 . (java+前端小白)第一次碰到跨域问题,小伙伴们...

  • 跨域

    ??JSONP只能解决GET请求跨域,不能解决POST请求跨域问题,XHR2可以解决GET,POST方式的请求跨域...

  • 跨域

    跨域 什么是跨域: 解决跨域 通过jsonp原理:在页面引入跨域js和css时,没有存在跨域问题.因此可以动态创建...

  • JSONP技术解决跨域问题

    JSONP技术解决跨域问题 官方解释: JSONP是一个非官方的协议,它允许在服务器端集成script tags返...

  • 使用JSONP解决ajax跨域

    在日常开发中,不免遇到跨域的问题。在这里我们介绍使用Jsonp来解决ajax跨域的问题 什么是跨域? 跨域,指的是...

  • Ajax跨域问题

    一、跨域问题 二、跨域的定义以及产生原因 三、解决思路 四、JSONP 五、跨域解决的方向 五、浏览器禁止检查

  • 跨域上传图片并预览

    跨域上传文件 之前解决跨域问题都是使用的JQuery的JSONP类型的Ajax请求,JSONP原理是让服务器把数据...

网友评论

      本文标题:JSONP技术解决跨域问题

      本文链接:https://www.haomeiwen.com/subject/jlkumxtx.html