JSONP 跨域共享信息

  由于同源策略,一般来说位于 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);

  }

  }