加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jsonp 请求和回传实现

发布时间:2020-12-16 18:43:34 所属栏目:百科 来源:网络整理
导读:? JSONP最主要的是可以解决跨域问题,不然谁会没事用这种格式。 下面是我用JSONP的一些心得体会: JSONP是JSON with Padding的略称。它是一个非官方的 协议 ,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。对

?

  JSONP最主要的是可以解决跨域问题,不然谁会没事用这种格式。

  下面是我用JSONP的一些心得体会:

 JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。对,它就是一种协议,不是数据格式,开始我也被

dataType: "jsonp"这个鬼东西误导了,我们根本不需要考虑格式问题,该返回什么格式就返回什么格式,只要注意几个地方就可以了:

1. jsonp: "callback",jsonpCallback:"userHandler",这两个可以自定义也可以不定义,为了可读性建议还是自定义好。
$.ajax({
           url: "http://172.25.19.63:8084/web/",type: "post",dataType: "jsonp",jsonp: "callback",jsonpCallback:"userHandler",//           contentType: ‘application/json‘,//           data:JSON.stringify(json),
           data:{password: "password",username: "username"},success: function(data){
               alert(data.name)//得到”忍着不哭泣“
      },
      error: function(data){
         alert(data.status);//调用状态
      }
});
2.  在服务器端callback = resquest.getParamter("callback")取到的值是"userHandler",然后如下图拼装起来写入response里面就OK了
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
      callback = resquest.getParamter("callback")//取到的值应该是userHandler
      PrintWriter out = response.getWriter();
      String json = {"name":"忍着不哭泣"}
      out.println(callback+"("+json+")"); out.close();
}

3.上图是json格式字符串(可以其他格式)客户端就会取到json对象。

?

Jsonp原理:?首先在客户端注册一个callback,然后把callback的名字传给服务器。此时,服务器先生成 json 数据。然后以 javascript 语法的方式,生成一个function,function 名字就是传递上来的参数 jsonp.最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读