JSONP 跨域共享信息
更新时间:2012年08月16日 11:33:52 作者:
JSONP(JSON 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);
}
}
下面是我在一个项目中的应用:
描述:域名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);
}
}
您可能感兴趣的文章:
- jsonp原理及使用
- ajax JSONP请求处理回调函数jsonpCallback区分大小写
- 浅析php中jsonp的跨域实例
- 滑轮滚动到页面底部ajax加载数据配合jsonp实现探讨
- 借助script进行Http跨域请求:JSONP实现原理及代码
- js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
- 什么是json和jsonp,jQuery json实例详详细说明
- JSONP 跨域访问代理API-yahooapis实现代码
- 说说JSON和JSONP 也许你会豁然开朗
- 跨域请求之jQuery的ajax jsonp的使用解惑
- Jsonp 跨域的原理以及Jquery的解决方案
- 基于Jquery的跨域传输数据(JSONP)
- jquery下利用jsonp跨域访问实现方法
- Jsonp 跨域的原理以及Jquery的解决方案
- JQuery jsonp 使用示例代码
- Json和Jsonp理论实例代码详解
相关文章
json-lib出现There is a cycle in the hierarchy解决办法
如果需要解析的数据间存在级联关系,而互相嵌套引用,在hibernate中极容易嵌套而抛出net.sf.json.JSONException: There is a cycle in the hierarchy异常。2010-02-02Javascript生成json的函数代码(可以用php的json_decode解码)
这几天迷上了JSON,连项目中一些XML的工作都交给了JSON,话说JSON真的比XML方便的多啊2012-06-06
最新评论