当前位置: 首页 > 工具软件 > Jason > 使用案例 >

ajax,jason,jasonp

臧亦
2023-12-01

 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实际上是一种脚本注入(Script Injection)方式,存在一定的安全隐患。:
            2:在ajax请求时readyState改变会引发事件,告诉我们ajax调用成功了还是出错了。但是用jasonp这个方法就没有这种状态,如果出错了没办法发出出错通知。


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

 类似资料: