一个项目由于用了二级域名,但是需要请求的文件位于www域名下,几次请求没在firebug看到任何请求信息的情况下我突然意识到,我也碰到了这个该死的跨域请求的问题,于是google之,网上找到了几乎相同的解决方案,用jQuery的json方式解决,我多次试验,最后甚至原封不动地拷来代码,均失败,才最终在另一处博客发现原来光客户端请求也不够,服务器端不能光返回json数据了,而是要返回一个回调函数,这才解释了为什么客户端为什么要以get方式送一个 callback进去,这样,前端+后端,立刻成功,代码如下:
前可以采用这三种方式请求,大同小异,看个人爱好了:高亮部分是需要注意的
假设要跨域请求的网址为 http://www.b.com/demo.php&action=funcname
则应写成请求如下网址:var url= "http://www.b.com/demo.php&action=funcname&callback=?";
1,经典方式:
$.ajax({
type : "GET",
url : url,
dataType : "jsonp",
jsonp: 'callback',
success : function(json){
//do something here;
}
});
2,json方式,是方法一的高级封装
$.getJSON(url, function(json){/*do something here;*/});
3,我比较别扭,喜欢用这一种,因为毕竟get是用得最多的,也最有感情啦
$.get(url,function(json){/*do something here;*/},”jsonp”);
好了,这不是重点,我照着这三种方法都写过,全失败,原来需要服务端返回的是
JQUET0988788({"account":"XX","passed":"true","error":"null"});
//(字符串)这样的代码,而不是
{"account":"XX","passed":"true","error":"null"},
函数名就是你在服务端 request一下callback就可以了,两个括号也要加上,注意,是拼成字符串出去,然后,保你立刻成功
如:echo $_REQUEST['callback'].'('.$str.')';
总结,用JSONP要做两件事:
1/请求地址加参数:callback=?
2/服务器段把callback的值作为方法名传回来,如”JQUET098788(json)”
当然,别忘了这种情况下只能返回 json数据了。