以下是同一主域名不同子域名的情况,网上查了很多方法比如什么8种常用方法,发现都不是很好实践,大伙帮看看怎么能比较简单点,就是page1.html 通过ajax访问到echo.php数据,谢谢
http://a.w1.com/page1.html:
<div id="div1"></div>
<script>
new Core.AjaxRequest({
url: "http://w1.com/api/echo.php",
target:"div1"
});
</script>
http://w1.com/api/echo.php:
<?php
echo "ajax请求数据";
==================================
其实我是希望用js原生的方法解决这个问题,解决了http://a.w1.com访问http://w1.com跨域问题,谢谢各位
目前已经找到解决办法是:
http://a.w1.com/page1.html
<script>
function createScript(sUrl){
var oScript = document.createElement("script");
oScript.type = "text/javascript";
oScript.src = sUrl;
document.getElementsByTagName("head")[0].appendChild(oScript);
}
createScript("http://w1.com/api/echo.php?callback=dosomething");
function dosomething(jsondata){
document.getElementById("div1").innerHTML = jsondata;
}
</script>
http://w1.com/api/echo.php:
<?php
$callback = $_GET['callback'];//得到回调函数名
$data = array('a','b','c');//要返回的数据
echo $callback.'('.json_encode($data).')';//输出
?>
简单的没有的,方法很多,看你如何权衡利弊
我觉得比较好用的跨域方式为HTML5的postMessage,这里有一个封装的方法,你可以看看
iframe跨域通信的通用解决方案-第二弹!(终极解决方案)
php代码加一句这个再echo就好了 header('Access-Control-Allow-Origin: *');
JQ 的 ajax 用jsonp方式请求 不是够简单了吗?
跨子域的话,设置document.domain = w1.com
试试?
jQuery下Ajax请求的参数加上fn=?,类型改为jsonp即可:
$.get('http://w1.com/api/echo.php?fn=?',function(msg){
alert(msg);
},'jsonp');
服务器代码要修改为:
$fn = $_GET('fn');
echo $fn."(ajax请求数据)";
底层实现就不贴了。。。
//一个简单的demo
//前端实现
$.ajax({
type : "get",
url : "http://w1.com/api/echo.php",
dataType : "jsonp",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
astnc: false,
success : function(result){
console.log(result);
},
error:function(error){
console.log(error);
}
});
// php
<?php
$callback = isset($_GET['callback']) ? trim($_GET['callback']) : ''; //jsonp回调参数,必需
$date = array("age"=>$_GET['age'], "message"=>$_GET['age']);
$date["msg"]="err";
$date["info"]="因人品问题,发送失败";
$tmp= json_encode($date); //json 数据
echo $callback . '(' . $tmp .')'; //返回格式,必需
?>