zoukankan      html  css  js  c++  java
  • JSONP 跨域共享信息

    定义来源:http://zh.wikipedia.org/wiki/JSONP

    JSONPJSON with Padding)是资料格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料。另一个解决这个问题的新方法是跨来源资源共享

    由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com 的服务器沟通,而 HTML 的 <script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的 JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

    下面是我在一个项目中的应用:

    描述:域名dev.uc.everychina.com 要获得域名 dev.members.everychina.com下的数据

    dev.members.everychina.com的服务器端代码:

    class JsController extends CController {
    public function actionIndex() {
        $callback = isset($_GET['callback']) ? $_GET['callback'] : '';
    
            $result = array();
            
            $userinfo = Intf_Client_Uc_User::instance()->getLoginUser();
            
            $cid = Everychina_Member::instance()->getCid($userinfo['uid']);
            //公司展厅评分
            $room_score = Ec_RoomScore::getInstance();
    
            //获得展厅老的评分
            $update_status = true;
            //重新评分
            if(isset($_GET['action']) && $_GET['action']=='update') {                                  
                $score_res = $room_score->getScoreInfo($cid);                     
                $room_score->updateScoreResult($cid,$score_res);
                $update_status = true;                 
            }
            
            $result['status'] = $update_status;
            $res = $room_score->getScoreResult($cid);      
            
            $result['score'] = $room_score->getScoreResultView($res['score']);
            
            if ($callback) {
                $js = json_encode($result);
                echo "$callback( ($js) );";
            } 
            
        }

    域名 dev.uc.everychina.com 下,前端调用(html)

    <a id="update_score" href="#" onclick="ajaxUpdateScore();return false;">update score</a>
    <div id="member_score"></div>

    javascript

        function ajaxUpdateScore(){
            if(document.getElementById("member_score_script")) {
                var score_script = document.getElementById("member_score_script");            
                document.body.removeChild(score_script);                         
            }
            
            var score_script = document.createElement("script");
            score_script.id = "member_score_script";
            score_script.src = 'http://dev.members.everychina.com/index.php?r=js/index&callback=show_score&t='+new Date().getTime();
            document.body.appendChild(score_script);
    }
    function show_score(json) { if(json.status == true) { var html = '<p>level:'+json.score.level+'</p>'; html += '<p>msg:'+json.score.msg+'</p>'; html += '<p>score:'+json.score.score+'</p>'; $("#member_score").html(html); } }
    你对人生迷茫吗? 那就背起行囊,起步远行吧
  • 相关阅读:
    【Android 界面效果7】Android中Gallery和ImageSwitcher同步自动(滚动)播放图片库
    【Android 界面效果10】Android中View,ViewGroup,Window之间的关系
    Android平台移植初解
    Android实现网络多线程断点续传下载
    centos修改 机器名
    Linux简单地隐藏文件及显示隐藏文件
    tar 打包隐藏文件及排除不需要打包的文件
    mysql新建用户,用户授权,删除用户,修改密码
    Linux下查看磁盘剩余空间和文件夹大小
    VPS Centos 5.5 安装 kloxo面板
  • 原文地址:https://www.cnblogs.com/daxian2012/p/2640650.html
Copyright © 2011-2022 走看看