我有一个网站,每个页面都有一个按钮。单击按钮时,它会调用一个函数readAllNotifs
:
function readAllNotifs() {
$('#ticker').fadeTo(0,0);
$.get('scripts/readAllNotifs.php');
}
这是脚本/readAllNotifs.php:
<?php
session_start();
require '../PDOconnection.php';
if (!isset($_SESSION['uID'])) {
$_SESSION['interPageMessage'] = "You need to login to view this page";
header("location: ../login.php");
die();
}
$query = $DBH->prepare("UPDATE notifications SET readStatus = 'true' WHERE uID = ? ORDER BY readStatus DESC LIMIT 10");
$query->bindparam(1,$_SESSION['uID']);
$query->execute();
?>
现在在每一页上,这都按预期工作。我单击按钮,#ticker
消失,然后查看我的数据库,行已更新。但是,在 1 个特定页面上,它不起作用......我不知道为什么......
当我单击按钮时,#ticker
消失(所以我知道正在调用该函数)..然后我检查了它不起作用的原因是我正在谈论的文件是否在不同的目录中(然后是 scripts/readAllNotifs .php 是错误的)。但是不,它与其他页面的文件位于同一目录中(这些页面可以完美运行)。所以我查看了我的(Chrome)开发人员工具,查看了网络选项卡,当我单击按钮时,我看不到发送到该页面的请求。我觉得这很奇怪,所以我检查了其他可以完美运行的文件,但即使在那里,网络标签也没有显示对 readAllNotifs.php 的调用,但它仍然有效。然后,我切换到控制台,右键单击并选择 Log XMLHttpRequests... 现在,当我单击按钮时,我可以看到:
XHR finished loading: "http://localhost/trunk/scripts/readAllNotifs.php".
但是,仍然检查了我的数据库。没变。
所以我又试了一次,我改变了php文件的最后一行
$query->execute();
对此:
$query->execute() or die(var_dump($query->errorinfo()));
然后去网站上的所有页面,包括有问题的页面,我检查了网络标签,仍然没有调用这个页面的记录。然后我直接在浏览器中访问 scripts/readAllNotifs.php。它加载了一个空白页面(成功!)我检查了数据库,是的,值得到了更新。
现在没有意义的是,如果php文件完美运行,如果函数调用完美运行,SQL语法完美,PDO执行不会输出错误,如果页面在正确的目录中,如果同一目录下的其他文件可以完美地执行此操作......那为什么这个页面不能呢?
PS 涉及的 Javascript 保存在外部 .js 文件中,并使用脚本标签链接到网站上的每个页面。此外,此脚本标记位于页面上的所有其他脚本标记之前(用于包含 jQuery.js 的标记除外)