【发布时间】:2012-01-03 09:36:22
【问题描述】:
我有一个 header.inc.php、实际的 php 网页和一个 footer.inc.php。实际页面还使用将活动记录到数据库的包含。如此简化我的页面如下所示:
<?php
require_once 'header.inc.php';
require_once 'insertSearchLog.inc.php';
?>
<!--HTML and JavaScript for AJAX-->
<?php
require_once 'footer.inc.php';
?>
AJAX 是使用带有 JQuery 插件数据表的 JQuery 完成的。
问题是包含 insertSearchLog.inc.php 对显示的数据表中的每一行执行一次,这对我来说没有意义? AJAX 的重点不是重新加载整个页面吗? 如何防止这种行为?
附加评论:似乎是 IE8 的 FireFox 问题,不会发生此问题!
编辑:
为了避免这个问题,我在插入日志之前添加了一个检查:
$searchString = $_SERVER['QUERY_STRING'];
if (!isset($_SESSION['lastQueryString'])
|| $searchString != $_SESSION['lastQueryString']) {
// insert into log snipped
$_SESSION['lastQueryString'] = $searchString;
}
但最初的问题仍然存在,如果这是默认的 firefox 行为,我会觉得非常令人费解。
编辑 2:部分(为简洁起见)JS 代码:
$(document).ready(function() {
// ..snipped unrelated content
$('#result').dataTable( { // initialize datatables plugin
"bProcessing": true,
"bServerSide": true,
// ... snipped further initialization parameters of datatables
"fnServerData": function ( sSource, aoData, fnCallback ) {
// ...snipped setting GET parameters for AJAX request
$.ajax( {
"dataType": 'json',
"type": "GET",
"url": sSource,
"data": aoData,
"success": fnCallback
} );
}
} );
} );
“结果”是一个 HTML 表格元素,数据将在其中显示。
header 和 footer.inc.php 根据要求,很明显它与问题无关:
<!-- start header.inc.php-->
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../sharedRessources/css/main.css" type="text/css" rel="stylesheet" media="all">
<link href="../sharedRessources/css/datatables/demo_table.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="../sharedRessources/js/jquery-1.6.2.js"></script>
<script type="text/javascript" src="../sharedRessources/js/jquery.dataTables.min.js"></script>
<title>myApp</title>
</head>
<body>
<div id="wrapper">
<div id="head">
<h2>myApp</h2>
<hr>
</div>
<div id="columns">
<!-- end header.inc.php-->
<!--page content-->
<!-- start footer.inc.php-->
<?php
if (!empty($_SESSION['Message'])) {
echo '<div class="message">' . $_SESSION['Message'] . '</div>';
unset($_SESSION['Message']);
}
if (!empty($_SESSION['Error'])) {
echo '<div class="error">' . $_SESSION['Error'] . '</div>';
unset($_SESSION['Error']);
}
?>
</div>
<div id="foot">
<hr>
<small>Copyright 2011</small>
</div>
</div>
</body>
</html>
<!-- end footer.inc.php-->
插入Searchlog.inc.php:
<?php
if (isset($_GET)) {
$searchString = $_SERVER['QUERY_STRING'];
if (!isset($_SESSION['lastQueryString'])
|| $searchString != $_SESSION['lastQueryString']) {
$conn = getDatabaseConnection();
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$sqlLog = "INSERT INTO log_table (user_id,search_string) VALUES(:userId,:searchString)";
$preparedStatement = oci_parse($conn, $sqlLog);
oci_bind_by_name($preparedStatement, ':userId', $_SESSION['login']);
oci_bind_by_name($preparedStatement, ':searchString', $searchString);
oci_execute($preparedStatement);
oci_free_statement($preparedStatement);
oci_close($conn);
$_SESSION['lastQueryString'] = $searchString;
}
}
?>
【问题讨论】: