理解JSONP

1.AJAX

ajax是基于XMLHttpRequest 的,是不能跨域的。
request = new XMLHttpRequest();
request.onreadystatechange = function () {

    /*表示XMLHttpRequest对象的状态:0:未初始化。对象已创建,未调用open
     1open方法成功调用,但Send方法未调用;
     2send方法已经调用,尚未开始接受数据;
     3:正在接受数据。Http响应头信息已经接受,但尚未接收完成;
     4:完成,即响应数据接受完成。*/

    if (request.readyState == 4) {
        if (request.status == 200) {
            console.info(request.responseType);
            console.info(request.responseXML);
            console.info(request.responseText);
            //alert(request.responseXML);
        }
    }
    if (request.readyState == 0) {
        console.info("未初始化。对象已创建,未调用open");
    }
    if (request.readyState == 1) {
        console.info("send方法已经调用,尚未开始接受数据");
    }
    if (request.readyState == 3) {
        console.info("正在接受数据。Http响应头信息已经接受,但尚未接收完成")
    }


};
var url = "http://localhost:8080/apphealthcheckstatus.jsp";

//可以选择同步还是异步
request.open("GET", url, true);
request.send(null);

2.JSONP

ajax请求不能跨域,但是script可以跨域。只是返回的数据只能当作是js代码执行。所以JSONP的思想就是通过动态构造 script标签跨域请求,其返回的数据一般是js的函数调用。如:
//script标签解决跨域问题
//src:url(跨域地址)?参数列表n=n&callback=callbackMethod
function callbackMethod(data){
    console.info(data);
}
function createScript(src) {
    var element = document.createElement("script");
    element.src = src;
    element.language = "javascript";
    element.type = "text/javascript";

    document.head.appendChild(element);
}

createScript("http://abc.beta1.fn:8080/apphealthcheckstatus.jsp?callback=callbackMethod");
通常我们的请求调用返回值是这样的callbackMethod(参数1,参数2),callbackMethod是通过callback参数传递给后端服务的,callback参数不是固定的,是自己定义的,只要后端服务能识别,名字可以随便起。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值