<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对象