jQuery跨域心得

来源:互联网 发布:编程培训班多少钱 编辑:程序博客网 时间:2024/06/06 01:45

一个项目由于用了二级域名,但是需要请求的文件位于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数据了。

0 0
原创粉丝点击