jquery的ajax实现跨域调用---jsonp

<script src="../js/jquery-1.8.1.min.js" type="text/javascript"></script>

 <script type="text/javascript">

  $(function(){

        $.ajax({

            type : "get",

            async:false,

            url: "http://test.panjiayuan.com/test/jsonp.ashx", //跨域请求的地址

            dataType : "jsonp",    //传输的数据类型

            jsonp: "callbackparam",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)

            jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,

            success : function(json){

                alert(json);

                alert(json.name);

            },

            error:function(){

                alert('fail');

            }

        });

 

    });

当成功后执行的success方法的内部原理应该就是 接受到了后台返回的success_jsonpCallback函数并且把参数传递给了该方法中的参数data,如果页面中也刚好有一个定义了的回调函数,那么程序会先调用定义的这个回调函数,后再去调用ajax的success方法如: function success_jsonpCallback(data) {

        alert('11');

        alert(data);

    }

    </script>

一般处理程序接收到传递来的回调函数名称,并且要把这个函数返回到前台,返回的方式就是直接调用了这个自定义的回调函数,所以当执行完成后台的程序后返回到前台的时候,就直接调用了回调函数的执行。如上一遍中的写法

后台一般处理程序:

string callbackFunName = context.Request["callbackparam"];

context.Response.Write(callbackFunName + "({ \"name\":\"true\"} )");

注意:后台传递json格式

1 键必须是字符串 ,值如果是 字符串也必须加上 双引号 如果是数字那就可以不必要 如果值为数字 那么前台获取
到的也是数字格式的值
2 有时候值如果为空 直接用双引号 错
3 值中不能有\n 或者是\r\n这样的特殊字符出现,这样会导致返回的json的值中换行 就不是json对象了
4 单双引号嵌套要合理 如果其中出现了单引号和单引号嵌套侧位错误,双引号 同理 所以对于请求来的字符串双引号
比较多一般把其中的单引号替换为空,在外面使用单引号
5 如果值是数组 那么数据中不能为空数组,否则错
6 jsonp 指定的回调函数中只能有一个接受值的参数 多了不认(即使自己在回调函数中指明有多个参数), 所以如
果有多个参数 侧要组成json对象

posted @ 2013-04-12 17:38  plugin-loader  阅读(164)  评论(0编辑  收藏  举报