在 thinkphp 中使用原生 js 发起 ajax 请求的时候、在控制器无法使用 is_ajax 进行判断。而使用 jquery 中的 ajax 是没有问题的。
在thinkphp中、有一个判断是 ajax 请求的常量 is_ajax;
ajax 请求常用的有两种情况:一种是原生 js 的 ajax 请求、一种是 jquery 的 ajax 请求。
accept: application/json, text/javascript, */*; q=0.01 accept-encoding: gzip, deflate, br accept-language: zh-cn,zh;q=0.9 connection: keep-alive content-length: 22 content-type: application/x-www-form-urlencoded; charset=utf-8 cookie: phpsessid=ns9mjve234erh0qerlcl180v52 host: localhost origin: http://localhost referer: http://localhost/ok/ user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/547.36 (khtml, like gecko) chrome/71.0.3578.98 safari/547.36 x-requested-with: xmlhttprequest
accept: */* accept-encoding: gzip, deflate, br accept-language: zh-cn,zh;q=0.9 connection: keep-alive cookie: phpsessid=ns9mjve234erh0qerlcl180v52 host: localhost referer: http://localhost/tp/ user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/547.36 (khtml, like gecko) chrome/71.0.3578.98 safari/547.36
在 tp3.2.3 版本中
\thinkphp\library\think\app.class.php (line:49)
define('is_ajax', ((isset($_server['http_x_requested_with']) && strtolower($_server['http_x_requested_with']) == 'xmlhttprequest') || !empty($_post[c('var_ajax_submit')]) || !empty($_get[c('var_ajax_submit')])) ? true : false);
使用 jquery 发送 ajax 请求的时候、比使用原生 js 中的 ajax 多一个请求头 x-requested-with: xmlhttprequest。
而且 thinkphp 就是利用判读是否存在请求头这种原理去定义常量 is_ajax 的。
在发送ajax请求的时候设置一个对应的请求头信息。
function page( page ) { var ajax = new xmlhttprequest() ajax.open( 'get', '__url__/show?page='+page, true ) ajax.setrequestheader("x-requested-with", "xmlhttprequest"); ajax.send() ajax.onreadystatechange = function () { if ( ajax.readystate == 4 && ajax.status == 200 ) { document.getelementbyid( 'box' ).innerhtml = ajax.responsetext; } } }
设置完之后、再次看请求头信息、与之前的对比、多了一条
accept: */* accept-encoding: gzip, deflate, br accept-language: zh-cn,zh;q=0.9 connection: keep-alive cookie: phpsessid=ns9mjve234erh0qerlcl180v52 host: localhost referer: http://localhost/tp/index.php/home/index/show user-agent: mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/547.36 (khtml, like gecko) chrome/71.0.3578.98 safari/547.36 x-requested-with: xmlhttprequest
如对本文有疑问, 点击进行留言回复!!
如何去设计前端框架能力?星巴克消息开放项目从0到1,从点到面的思考
PHP制作日历,实现在1970年到2020年之间的任何一个月份的输出。上半部分
网友评论