JSONP是一个非常强大的构建mashp的方法,可是不是一个解决跨域访问问题的万能药。它也有一些缺点
第一也是最重要的:JSONP不提供错误处理。如果动态插入的代码正常运行,你可以得到返回,但是如果失败了,那么什么都不会发生。你无法获得一个404的错误,也不能取消这个请求
另外一个重要的缺点是如果使用了不信任的服务会造成很大的安全隐患。
js代码:
(function(a, b) { var html=""; $.ajax({ async: false, dataType: "jsonp", type:'get', url:'/e/zxfcode/action.php?act=mmtimeline&typeid=137&reqnum=16', success : function(data){ $.each(data.data,function(i,item){ html+='<a class="setlist-item" href="'+item.arcurl+'" title="'+item.title+'" target="_blank">'; html+='<img alt="'+item.title+'" src="'+item.litpic+'" />'; html+='<p>'+item.title+'</p>'; html+='</a>'; }); $(".endpage-related").append($(html)); } });
PHP代码
$sql=$empire->query("select * from {$dbtbpre}ecms_photo where classid=$typeid order by onclick limit ".$reqnum); $i=0; while($r=$empire->fetch($sql)) { $id=$r['id']; $title=$r['title']; $titlepic=$r['titlepic']; $titleurl=$r['titleurl']; $onclick=$r['onclick']; $arr[$i]= array ('arcid'=>$id,'title'=>$title,'shortitle'=>$title,'litpic'=>$titlepic,'arcurl'=>$titleurl,'click'=>$onclick); $i++; } $list=json_encode($arr); $callback = isset($_GET['callback']) ? trim($_GET['callback']) : ''; echo($callback.'({"ret":0,"retmsg":"","timestamp":'.time().',"data":'.$list.'})');