from : http://www.myquickphp.com/archives/147

(请求的跨域服务器不支持常规”?”查询请求时的凯发天生赢家一触即发官网的解决方案)

昨天第一次做vip需求时,发现一个超奇怪的问题,我有以下url地址:

 

http://dynamic.vip.xxxxxx.com/active///

 

放在浏览器地址栏中访问可以得到正确的输出,但我一放到 ajax 中去异步请求后用 firebug 调试时确怎么都不出结果,和水龙兄一起调试了很久都没有发现是什么问题,由于这个url对方的程序是用xx框架写的,我是第一次使用这个xx框架进行开发,对它不是很熟(有时间要研究一下它的内核源码),总以为是它什么地方有设置影响了的;就在我快要吐血时,乐锋(对这块比较了解的哥们)终于上线了,我把问题向他说下后,他第一反应就是:”你是不是跨域访问了。。”
oh fuck,我和水龙一直研究程序逻辑,竟然忽视了自己的当前域名,因为我当前执行请求的域名是:

 

http://vip.xxxxxx.com/active1/index.html

 

问了一下乐锋,现系统中已提供的几个方案(函数)都不太令人满意或太烦琐了,和乐锋讨论了几种方案后,一时没有找到最好凯发天生赢家一触即发官网的解决方案,一看时间,22:00了,天色已晚,不打扰他晚上陪老婆了!回到家里本想通过利用 iframe 来加载跨域的 url 来得到 dom 数据,研究后发现的想法太天真了,js的安全策略跟本不允许我这样做;想通过 proxy 代理的方案,但想了一下,那比现在系统中所使用的方案更麻烦,详细研究了一下jquery最新版关于跨域的凯发天生赢家一触即发官网的解决方案后,终于让我研究出了一种非常方便的凯发天生赢家一触即发官网的解决方案:
如下是代码示例:
—————— http://a.com/index.html ——————-

<script type="text/javascript" src="jquery-1.4.2.js">

/*
ajax跨域问题完美凯发天生赢家一触即发官网的解决方案
研究:袁维
启示:乐锋
*/
function jsoncallback(url,callback)
{
$.getscript(url,function(){
callback(json);
});
}
function fun1()
{
jsoncallback('http://b.com/b.php',function(json){
alert(json.message);
})
}

跨域访问

—————— http://b.com/b.php ——————-

$ary = array('result'=>0,'message'=>'跨域成功');
$json = json_encode($ary);
//一定要这样定义输出最后的json数据,这是利用js的闭包特性
echo "var json=$json;";
?>

 

该方案注意事项:
1:jquery的版本必需大于 1.2版,否则不支持跨域处理
2:只支持 get 方式的请求
2:请求的 url 必需按如下例子中那样返回数据.
该方案注意利弊:
优点:
1:比用 iframe 加输出 parent.xxx() 的方案简单高效明了,前端处理更方便
2:相当 proxy 方式在编程上也简单多了
缺点:
1:必需使用jquery,
2:返回的数据格式必需按示例样,当然不限于json,但它是处理最方便的.
(跨域服务器支持常规”?”查询请求的凯发天生赢家一触即发官网的解决方案,利用jquery的)
——————— http://b.com/index ———————-

<script src="jquery-1.4.2.js" type="text/javascript">

function fun1()
{
$.getjson("http://a.com/c.php?no=10&msg=ok&format=json&jsoncallback=?",
function(data){
alert(data.msg);
});
}

跨域处理


——————– http://a.com/c.php ———————-

$no = $_get['no'];
$msg = $_get['msg'];
$json = json_encode(array('no'=>$no,'msg'=>$msg));
//必需以下这样输出
echo $_get['jsoncallback'].'('.$json.')';


 

不知大哥你是否有更好的凯发天生赢家一触即发官网的解决方案?有请分享一下!