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

关于JSONP的理解

发布时间:2020-12-16 19:50:07 所属栏目:百科 来源:网络整理
导读:JSONP的实质是通过跨域请求,返回给页面一个结果,这个请求没有js端类似success的回调函数,其功能类似于: script type="text/javascript" src=" XXX"/script 即引入一个字符串,并执行这个字符串,不过好像引入js这种文件的话,不会执行。当然可以通过eval

JSONP的实质是通过跨域请求,返回给页面一个结果,这个请求没有js端类似success的回调函数,其功能类似于:

<script type="text/javascript" src="XXX"></script>

即引入一个字符串,并执行这个字符串,不过好像引入js这种文件的话,不会执行。当然可以通过eval来执行

两种实现:

Ext.create('Ext.data.Store',{
proxy: {
type: 'jsonp',
extraParams:{"params" : Ext.encode(params)},
url : selectURL
},
autoLoad: true
});
/*
jQuery.ajax({
url : updateURL,
data : {"params" : Ext.encode(params)},
type : "get",
cache : false,
dataType : "jsonp",
async: false
});
*/

后台返回的字串:

comboxPBStoreData_JSONP=[{"no":"1234567","name":"AAA"},{"no":"1234568","name":"BBB"}]

这样,js中就相当于多了个全局变量comboxPBStoreData_JSONP,可以直接用来使用,当然返回字符串也可以是“MessageBox('AAA');”这种,这样等这个返回字串被处理时,就会弹出一个对话框,这种方法可以从另一个角度部分解决JSONP没有回调的弊端,至少页面可以有响应,知道处理结果

正确的用法:

前台

jQuery.ajax({
url : updateURL,
async: false,
success : function(jsonstr){
var result = Ext.decode(jsonstr);
}
});

后台:

public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
  //获取参数
  String callback = request.getParameter("callback");

   JSONObject obj = new JSONObject();
  obj.put("addVersion",adds);
  response.getWriter().write(callback+"('"+obj.toJSONString()+"')");

注意:1、默认使用callback,jquery自动添加的

2、response返回时,必须拼装成fun('a')这种形式,'a'作为字符串,即success的jsonstr的值。

3、如果不使用callback,无法在前台收到回调处理,进不了success

(编辑:李大同)

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

    推荐文章
      热点阅读