php响应jsonp请求

请求 jsonp php 响应 js 一个 callback dataType html 对象 编程技术
发布日期 2022-09-05 更新日期 2022-09-05 阅读次数 45 文章字数 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 对象

发表评论

相关推荐
朱丰华   |   7个月前   |   php

php判断是否被iframe

221    评论    点赞
朱丰华   |   1年前   |   页面 · 监听

iframe子父页面信息传递与监听

375    评论    点赞
朱丰华   |   1年前   |   php

php正则表达式定界符:异常Delimiter must not be alphanumeric or backslash

190    评论    点赞
朱丰华   |   1年前   |   请求 · 一个

ab测压命令,apache测压工具

172    评论    点赞
朱丰华   |   1年前   |   php · 缓存 · opcache

php 加速、提高并发opcache

198    评论    点赞
朱丰华   |   1年前   |   < · iframe

让iframe嵌入的视频自适应 (100%宽度)?

122    评论    点赞
朱丰华   |   1年前   |   js · 重复

js如何避免重复监听addEventListener事件?

124    评论    点赞
朱丰华   |   1年前   |   正则 · 表达

正则表达式,实现if...then...else

113    评论    点赞
朱丰华   |   1年前   |   sql · php

PHP如何使用PDO批量执行SQL?

115    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 字符串

如何在 PHP 中将字符串的第一个字母转换为大写

150    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 正则

php正则表达式原生字符

86    评论    点赞
朱丰华   |   1年前   |   字符 · php · 比较

PHP比较字符串大小相关函数

111    评论    点赞
朱丰华   |   1年前   |   下载 · 请求

idm、浏览器下载发送两次下载请求

137    评论    点赞
朱丰华   |   1年前   |   html · id · <

html同一个页面有两个相同id ,如何用id选择器选中

109    评论    点赞
朱丰华   |   1年前   |   php

windows下编写、编译php扩展

158    评论    点赞
朱丰华   |   1年前   |   linux · php

linux下编写、编译php扩展

150    评论    点赞
朱丰华   |   1年前   |   curl

curl命令忽略ssl证书进行https请求

227    评论    点赞
朱丰华   |   1年前   |   js · export · import

js es6 export,import,export default的用法和区别

125    评论    点赞
朱丰华   |   1年前   |   js · vue · 监听

js vue监听,深度监听

114    评论    点赞
朱丰华   |   1年前   |   php · 混淆 · obfuscate · git

yakpro-po混淆php代码

106    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞