php响应jsonp请求
请求
jsonp
php
响应
js
一个
callback
dataType
html
对象
编程技术
发布日期
2022-09-05
更新日期
2022-09-05
阅读次数 53
文章字数 1.4k
jsonp是一种跨域请求解决方案,利用了 html 可以引入远程 js 的原理,实现跨域。
说白了,就是请求远程响应一个可执行的 js ,一般格式为一个callback对象(这里是一个js,只是看起来比较特殊): callback( $json )
优点:它的兼容性更好,在更加古老的浏览器中都 可以运行,不需要XMLHttpRequest或ActiveX的支持
缺点:它只支持GET请求而不支持POST等其它类型的HTTP请求;需要后端配合
一个完整的 php 响应 jsonp 的例子:
前端使用 jquery 请求,例如:(注意,必须使用 dataType: “jsonp”)
$.ajax({
url: masterDomain + "/include/ajax.php?service=job&action=invitation",
data: {
lease_day: ms_day,
lease_halfa: ms_halfa,
lease_hour: ms_hour,
place: mplace,
name: mcontact,
phone: mphone,
areaCode: areaCode,
rid: id,
pid: mzhiwei,
remark: remark.join("、")+(remark2 ? "、"+remark2 : ""),
},
type: "GET",
dataType: "jsonp",
success: function (data) {
if(data.state == 100){
showMsg('已发送邀请');
setTimeout(function(){
$('.popup-yqms').hide();
},2000);
}else{
showMsg(data.info);
}
},
error: function(){
showMsg('网络错误,邀请失败!');
}
});
实际生成的请求参数:
service: job
action: invitation
callback: jQuery183005780949854490891_1661221971605
lease_day: 2022-08-26
lease_halfa: 上午
lease_hour: 07:00
place: 1050302
name: 朱丰华
phone: 18278069613
areaCode: 86
rid: 98
pid: 256
remark: 请携带简历、请带纸笔、请携带作品、请着正装、2321
_: 1661222005709
响应数据(一个对象):
jQuery36008420933829690445_1661223447342({"state":100,"info":"邀请成功!"})
php具体实现代码:
$callback = htmlspecialchars(RemoveXSS($callback));
$callback = str_replace(')', '', str_replace('(', '', $callback));
if($callback){
if(isset($param['dataType'])){
if($param['dataType'] == 'html'){
echo $return['info'];
return;
}
}
echo $callback."(".json_encode($return, JSON_UNESCAPED_UNICODE).")";
}
总结:
jsonp,通常用于跨域请求js数据(不是js脚本),但利用了html请求js脚本的方式完成。
类似于在 html 中 <script src=”远程服务器 .php”></script> 。(也能返回 js 脚本,但是返回的数据不好处理)
使用 dataType : jsonp ,就是传递一个 callback 对象名,后端把响应数据加一个 对象名( $json ) 即可。
文章作者: 朱丰华
文章链接: https://smart.52dixiaowo.com/blog/post-40.html
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。
请求
jsonp
php
响应
js
一个
callback
dataType
html
对象
发表评论
相关推荐