资讯专栏INFORMATION COLUMN

jsonp + php 跨域实例

gyl_coder / 405人阅读

摘要:由于跨域的存在,使资源交互在不同域名间变的复杂和安全。对于跨域数据传输,当数据长度较小的长度内,是一种较好的解决方案。关于跨域可以参考跨域总结与解决办法的端调用主要功能通过向服务器,调用相应接口,获应数据根据获取数据结果做出相应回调。

由于跨域的存在,使资源交互在不同域名间变的复杂和安全。对于跨域数据传输,当数据长度较小(get的长度内),jsonp是一种较好的解决方案。

分享一个自己在jsonp使用过程中的demo。

关于跨域可以参考:跨域总结与解决办法

jsonp的js端调用

主要功能:通过jsonp向服务器,调用相应接口,获应数据;根据获取数据结果做出相应回调。

/**
 * jsonp demo
 * 通过回调函数,进行获取之后的事件加载
 *
 * @author:cuihuan
 * @private
 */
_jsonpDemo:function(callback){
    $.ajax({
        url: "http://your_site_url",
        type: "GET",
        dataType: "JSONP",
        success: function (data) {
            if (data && data.status) {
                if (data.status == "0") {
                    // failure solve
                    ...
                } else if (data.status == 500) {
                    // server error log
                    _sendInternalLog(data.info);
                } else if (data.status == 1) {
                    //success solve 
                    ...
                }
                
                // callback func
               (callback && typeof(callback) === "function" ) && callback(); 
            }

        },
        error: function () {
            _sendFailLog();
        }
    })

}
jsonp 服务器端 (php)
/**
 * 接口返回相应数据
 *
 * status: 0 标示失败,1标示成功,500发生错误
 * return: jsonp 
 */
public function actionGetJsonPInfo()
{
    try {
        $data = getNeedData()
        if ($data["status"] == "success") {
            $res = array("status" => "1", "info" => $data["info"]);
        }else{
            $res = array("status" => "0", "info" => "0");
        }
    }catch (Exception $e){
        $res = array("status" => "500", "info"=> $e);
    }

    // jsonp 通过get请求的返回数据形式
    if (isset ($_GET["callback"])) {
        header("Content-Type: application/json");
        echo $_GET["callback"]."(".json_encode($res).")";
    }
}
总结

目前来说,数据量小的跨域传输,jsonp是一种很好的解决方案。

jsonp在data中可以自动识别,res.status,res.info等状态位,比较方便。

php端的接受代码最好不要采用 Access-Control-Allow-Origin:* 风险太大。

本人小站原文

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78237.html

相关文章

  • 原生JavaScript实现AJAX、JSONP

    摘要:在这里讲解一下用原生如何实现。当然,前面也说过,你可以给定固定回调函数名最后我已经将和请求合并在一起了,下载链接原文链接原生实现如有问题,欢迎在下方留言 相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的。 其实,原生JavaScript...

    xcc3641 评论0 收藏0
  • PHP笔试面试题精选(一)

    摘要:,跨站脚本攻击。实际发的请求就是,用于表示这是一个请求。,用于告知服务器根据这个参数获取回调函数的名称,通常约定就叫。,回调函数的名称,也是前面参数的值,可省略,会自动生成。 本次课程主要围绕 PHP 面试和笔试中经常会出现的一些知识点,但是面试官会在笔试题基础上深入扩展,那么你知道如何更好的回答让面试官满意吗?题目收集自腾讯,迅雷,美图等公司的笔试面试题,以及本人面试经历中印象中的知...

    JohnLui 评论0 收藏0
  • 什么是同源/跨域?什么是CORS?什么是JSONP

    摘要:什么是跨域跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。同源又是什么呢所谓同源是指,域名,协议,端口均相同。什么是就可以解决跨域问题。 什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。 同源又是什么呢? 所谓同源是指,域名,协议,端口均相同。如:http://www.abc....

    kid143 评论0 收藏0
  • JavaScript Ajax与Comet——“其他跨域技术”的注意要点

    摘要:由两部分组成回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,回调函数的名字一般是在请求中指定的。下面是以个的例子回调函数的名字就是是通过动态的元素来使用的,使用时可以为属性指定一个跨域。是为与其他传递消息的很相似。 图像Ping技术 根据一个网页可以从任何网页中加载图像而不用担心使用跨域的原理, 我们可以动态的创建图像, 使用他们的onload和onerror事件处理程序...

    Hwg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<