ajax,jason,jasonp

 jason是代替xml的ajax传递数据的方式:

xml方式与jason方式的对比:

1:jason方式更简单,更容易写

2:处理方式

XML方式:

取回一个XML文件

循环它,从中提取值

处理这些值,等

JSON方式:

取回JSON字符串。

‘eval’JSON数据

     由于同源策略的限制,ajax传递jason需要用到的XMLHttpRequest只允许请求当前源(包含域名、协议、端口)的资源。而如众周知,script标签经常被用来加载不同域下的资源,例如在www.a.com可以使用http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js这个js文件,可以绕过同源策略。同样的,可以通过使用script标签来进行跨域请求,但是怎么获取异域源返回的数据呢?

     有这样一种方式:如果请求的这个远程数据本身就是一段可执行的js,那么这些js会被执行(相当于eval)。即若在www.a.com中存在一个showUserStatus()的js函数,它的作用是在www.a.com显示当前用户状态,

只要给它传递当前用户的状态数据就可以了。那么利用script标签请求的app.a.com中,输出数据为:showUserStatus(data),那么将会执行www.a.com中的showUserStatus(),用户当前的状态就在静态页面上显示了。

     使用JSON来传递javascript对象是一种最简单的方式了,这样的跨域通讯方式称为JSONP。
<script type="text/javascript">
    function showUserStatus(data) {
        alert(data.txt);
    }
</script>
<!--将函数名showUserStatus传递过去-->
<script type="text/javascript" src="http://chaoshi.daily.tmall.net/getIpAddress.htm?callback=showUserStatus"></script>
 
#set($callback=$rundata.getParameters().getString("callback"))
$!callback(["$!regin","$!city"]);
 

问题:1:JSONP实际上是一种脚本注入(ScriptInjection)方式,存在一定的安全隐患。:

2:在ajax请求时readyState改变会引发事件,告诉我们ajax调用成功了还是出错了。但是用jasonp这个方法就没有这种状态,如果出错了没办法发出出错通知。

参考资料:http://www.impng.com/web-dev/ajax-crossdomain-by-jsonp.html

相关推荐