第一也是最重要的:JSONP不提供错误处理。如果动态插入的代码正常运行,你可以得到返回,但是如果失败了,那么什么都不会发生。你无法获得一个404的错误,也不能取消这个请求
另外一个重要的缺点是如果使用了不信任的服务会造成很大的安全隐患。
最近用JSONP做了一个跨域提交问题:
js 代码:
<script>
// rtype 自定义返回类型参数:3 jsonp
function add_attention(uid,fid,opt,flag) {
}
</script>
PHP 服务端代码:ajax_interface_attention_sms.PHP
<?PHP
$callback = isset($_GET['callback']) ? trim($_GET[' callback']) : ''; //jsonp回调参数,必需
.....
$tmp= json_encode($date); //json 数据
echo $ callback . '(' . $tmp.')';
?>
js 代码:
<script> $("#test").bind("click",function(){$.getJSON("http://www.zhangsuoyong.com/demo/cross/ajax01/2.PHP?jsoncallback=?",function(data){ alert(data);}); }); $("#test2").bind("click",function(){$.ajax({ url :'http://www.zhangsuoyong.com/demo/cross/ajax01/2.PHP?jsoncallback=?', dataType : "jsonp",type : "GET",success :function(data){ alert(data);} }); }); </script>
PHP 服务端代码:
<?PHP
$callback = isset($_GET[' jsoncallback']) ?trim($_GET[' jsoncallback']) : '';
echo $ callback .'(10)';
?>