首先:
服务端页面 server.php
本地页面 local.php
server.php会echo出来json格式的数据(不能用return方式的)
local.php使用Ajax的方式接收数据(使用jQuery)
先说失败的经历:
刚开始的时候直接用GET或者POST的方式访问:
$.get(“http://maoegg.com/server.php?id=7846286947″, function(result){alert(result.name);}
这种方式是不行滴,因为会产生跨域问题,jQuery会报错说“拒绝访问”
用POST就更不行了,后来查资料的时候偶然发现POST是最拒绝跨域的(jsonp跟callback也是不行的,这个后面再说)
后来用$.getJSON(“http://maoegg.com/server.php?id=7846286947″, function(result){alert(result.name);}
这种方式也是不行的,也会产生跨域问题
下面就说可行的方法了:
前提是服务端页面加上callback:
举例说,本来server.php产生的数据是这样的:
$jsondata = “{symbol:’IBM’, price:120}”;
echo $jsondata;
现在要变成 echo $_GET['callback'].’(‘.$jsondata.’)';
这种方式才行。(说明,这里的$_GET['callback']对整个数据无任何影响,具体什么原理我也不清楚,应该是作为请求json数据的一个数字串标识而已)
客户端页面的请求改成:
$.get(“http://maoegg.com/server.php?id=7846286947&callback=?”, function(result){alert(result.name);}
或
$.getJSON(“http://maoegg.com/server.php?id=7846286947″, function(result){alert(result.name);}
不加callback呢?也是行的,把get方式的 dataType:’jsonp’ 就行了(看页面请求的时候,使用jsonp的方式,会自动在请求后面加上callback的)
post方式呢?应该是不行的吧,我没试很多,有试过解决的朋友分享一下
说明:
Ajax方式获取json数据不仅仅是PHP中采用这种方式,ASP、JSP也都是同样的(有查过);
跨域问题只是在服务器上才会产生(搭建的本地测试也算),只是建一个html页面,直接打开,是不会产生问题的
文章来源:毛蛋网(maoegg.com)




评论
发表评论 反向链接