每个文件中都有很多代码,太多了,无法发布,所以我给您一个关于每个文件中发生了什么的总体概念。
index.php[html下拉菜单代码等]
scripts.js[ajax从dropdown中检测用户选择,抓取fetch.php,该数据库将生成html代码,用于二次下拉选择并放入index.php]
fetch.php[根据用户选择和数据库查询生成二级下拉代码]
我需要查看要调试的具体查询内容,因此我要回显sql select语句:
$query = "SELECT * FROM databasename WHERE.."
那是在 fetch.php
当用户从 index.php
-我该怎么做?
2条答案
按热度按时间t1qtbnec1#
回显内容并执行die()或exit;之后。。。然后在浏览器的network选项卡中,开始录制,运行ajax请求(它将失败),但检查资源/名称,然后查看响应,它将显示脚本中的内容
摘自:chrome中的请求监控
chrome目前有一个内置的解决方案。
使用ctrl+shift+i(或导航到当前页控件>开发人员>开发人员工具)。
在较新版本的chrome中,单击扳手图标>工具>开发人员工具。)以启用开发人员工具。
在“开发人员工具”中,单击“网络”按钮。如果尚未启用,请为会话启用它或始终启用它。
单击“xhr”子按钮。
启动ajax调用。
您将看到项目开始显示在左侧列的“资源”下。
单击资源,有两个选项卡显示标题和返回内容。
其他浏览器也有一个network选项卡,但是您需要使用我的注解来获取查询的字符串值。
上面的解决方案是令人愉快的。
xu3bshqb2#
当我处理ajax时,返回json,我使用的一个技巧是利用输出缓冲。你不能只回显或输出你想要的任何东西,因为它会弄乱json数据,例如,
这样做的目的是将脚本的任何输出打包到json数据中,这样就不会弄乱格式。
然后在javascript端可以使用console.log
如果您不习惯调试
console.log()
,你通常可以F12
并在大多数浏览器中打开调试器。然后在那里输出将被发送到“控制台”。ie9有点问题console.log()
如果我记得,但我不想走得太远。注意:当你把它移到生产环境中时,一定不要把这些东西留在代码中,注解掉这一行非常简单,
这样您的调试信息就不会在生产中公开。有其他方法可以自动执行此操作,但这取决于是否执行本地开发,然后发布到服务器。例如,您可以打开
$_SERVER['SERVER_ADDR'];
那将会是::1
或者127.0.0.1
当它是本地的时候。这有一些缺点,主要是命令行界面(cli)无法提供服务器地址。所以通常我会把它绑定到一个全局常量中,这个常量表示站点处于什么“模式”(包含在公共入口点中,通常是index.php)。那么检查一下就简单了:
如果您知道如何使用错误报告,您甚至可以使用
仅当“显示错误”处于启用状态时才显示调试。
希望有帮助。
更新
因为我在评论中提到了它,下面是一个 Package 在类中的示例(这是一个简化版本,所以我没有测试这个)
然后,当您做出ajax响应时,您只需这样 Package 它(注意,$result是通过引用传递的,这样我们就不必返回,在出现异常的情况下,我们会“实时”更新$result,而不是在完成时更新)
如果需要将其他数据传递到闭包中,请不要忘记可以使用
use
声明,像这样。沙箱
如果环境是正确的(注解掉),这将处理捕获任何输出并将其放入调试。请务必实施某种保护措施,以便在生产过程中不将输出发送给客户,这一点我再强调也不为过。它还捕获任何异常并将其放入错误中。它还处理头和编码。
这样做的一大好处是json的结构一致,您将知道(在客户端)如果
if(data.userdata.error)
那么后端就有一个例外。它给你一个地方来调整你的头,json编码等。。。在php7中需要注意的一点是,您必须或者应该添加throwable接口(而不是exception)。如果要捕获错误和异常类,或者执行两个catch块。
假设我做了很多ajax并且厌倦了一直重写这个,我的实际类比这个更广泛,但这就是它的要点。
干杯。
更新1
我要做的一件事是在console.log()之前解析数据变量
这通常是因为您没有将正确的标头传递回浏览器。如果发送(就在调用json\u encode之前)
这只是让浏览器知道它正在返回什么类型的数据。大多数人忘记的一件事是,在网络上,所有的回复都是以文本形式完成的。甚至图像或文件下载和网页。都是文字,让文字变得特别的是
Content-Type
浏览器认为是这样的。有一件事需要注意
header
在发送头之前不能输出任何内容。不过,这与我发布的代码配合得很好,因为该代码将捕获所有输出并在发送头之后发送。我更新了原来的代码,使之有了标题,我把它放在了后来发布的更复杂的类中。但是,如果您将其添加进来,就不需要手动解析json了。
我应该提到的最后一件事是检查我是否得到了json或文本,如果在输出缓冲区启动之前发生了错误,您仍然可以得到文本。
有两种方法可以做到这一点。
如果数据是需要解析的字符串
或者如果你有头文件,而且总是json,那么就简单一点
希望有帮助!
更新2
因为这个主题经常出现,我把上面代码的一个修改版本放在我的github上,你可以在这里找到它。
https://github.com/artisticphoenix/misc/blob/master/ajaxwrapper/ajaxwrapper.php