什么是jsonp
首先,本篇博客是因为在看遍几乎在网络上crtl+c的文章后,没有一丝营养收获,熬夜写了一篇关于跨域请求数据jsonp的文章,接下来就听我娓娓道来。
- jsonp是什么
jsonp 全称是JSON with Padding,是为了解决跨域请求资源而产生的解决方案,是一种依靠开发 人员创造出的一种非官方跨域数据交互协议。
一个是描述信息的格式,一个是信息传递双方约定的方法。
好了,大家肯定是带着疑问来的,这些都是扯皮。接下来上代码。 - jsonp的ajax请求体
$.ajax({
url:"url",
type:"GET",
dataType:"jsonp",
jsonp: "callback",
jsonpCallback: "success_Callback",
success:function (json) {
alert(json[0])
},
error: function (XMLHttpReuqest, textStautus, errothrown) {
console.log(XMLHttpRequest.status);
console.log(XMLHttpReuqest.readyState);
console.log(XMLHttpRequest.responseText);
console.log(textStautus);
console.log(errothrown);
},
});
});
接下开咋们来分析一下,这个jsonp: "callback"以及jsonpCallback: "success_Callback"
这两个是什么玩意。
1.jsonp: "callback": 这个表示你的jsonp版本的ajax会有一个回调函数产生,一般默认值
都是callback,在你的后台,你可以通过request-->param("callback"),来
获取接下来jsonpCallback的回调函数名称。
2.jsonpCallback: "success_Callback":这个参数的值,如果不指定,jquery将会自动生成,
而你的服务器就需要通过request-->param("callback")来获取这个值,比如现在,
就行该是success_Callback值,谨记必须服务器要返回jsonp格式的数据。
服务器怎么处理?
- php
本人在使用tp5框架,框架可以通过助手函数来实现返回jsonp数据格式,上代码:
直接通过jsonp助手函数实现,这是$record为数组:
public function getUserRecordMessage(){
$record = (new Record())->getFalseMessage();
$record = json_decode(json_encode($record));
$record = (array)json_encode($record,JSON_FORCE_OBJECT);
return jsonp($record);
}
- java
至于Java代码的实现,可以通过request来获取参数callback的值,即获取到的值为success_Callback,通过拼接,将其拼接为jsonp后return回去。
服务器代码:
public String getUser() {
String callback = request.getParameter("callback");
result = callback+"({\"flag\":\"successfuly\"})";//返回必须是json字符串;
return SUCCESS;
}
xml配置
<package name="json" extends="json-default" namespace="/">
<action name="userRegist" class="com.credit.action.RegistAction" method="getUser">
<result name="success" type="json">
<param name="root">result</param>
</result>
</action>
</package>
好啦,实用,耐用方为上上之策,以上地方如有不足之处,请各位大佬指点一二,互相学习学习,
如有不懂之处,可以给我留言哦。。。。