ThinkPHP中使用IS_AJAX判断原生JS中的Ajax出现问题的解决方法

ThinkPHP中使用IS_AJAX判断原生JS中的Ajax出现问题的解决方法

内容导读

收集整理的这篇技术教程文章主要介绍了ThinkPHP中使用IS_AJAX判断原生JS中的Ajax出现问题的解决方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2804字,纯文字阅读大概需要5分钟

内容图文

本篇文章给大家带来的内容是关于ThinkPHP中使用IS_AJAX判断原生JS中的Ajax出现问题的解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

问题:

在 ThinkPHP 中使用原生 js 发起 Ajax 请求的时候、在控制器无法使用 IS_AJAX 进行判断。而使用 jQuery 中的 ajax 是没有问题的。

在ThinkPHP中、有一个判断是 ajax 请求的常量 IS_AJAX;

Ajax 请求常用的有两种情况:一种是原生 js 的 ajax 请求、一种是 jQuery 的 ajax 请求。

分析:

先看看使用 jQuery 中使用 ajax 发送请求的时候的头信息:

Accept: application/json, text/javascript, */*; q=0.01Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Connection: keep-aliveContent-Length: 22Content-Type: application/x-www-form-urlencoded; charset=UTF-8Cookie: PHPSESSID=ns9mjve234erh0qerlcl180v52Host: localhostOrigin: http://localhostReferer: 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.36X-Requested-With: XMLHttpRequest
再看看使用 JS 中的原生 ajax 发送请求的时候的头信息:
Accept: */*Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Connection: keep-aliveCookie: PHPSESSID=ns9mjve234erh0qerlcl180v52Host: localhostReferer: 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
再查看在TP是如何定义的常量 IS_AJAX:

在 tp3.2.3 版本中
ThinkPHPLibraryThinkApp.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, brAccept-Language: zh-CN,zh;q=0.9Connection: keep-aliveCookie: PHPSESSID=ns9mjve234erh0qerlcl180v52Host: localhostReferer: http://localhost/tp/index.php/Home/Index/showUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/547.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/547.36X-Requested-With: XMLHttpRequest

如此问题便解决了。

以上就是ThinkPHP中使用IS_AJAX判断原生JS中的Ajax出现问题的解决方法的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的ThinkPHP中使用IS_AJAX判断原生JS中的Ajax出现问题的解决方法全部内容,希望文章能够帮你解决ThinkPHP中使用IS_AJAX判断原生JS中的Ajax出现问题的解决方法所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com