У меня есть 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.
Проблема заключается в том, что include insertSearchLog.inc.php выполняется один раз для каждой строкив отображаемом виде данных, который не имеет смысла для меня?не смысл ли AJAX перезагружать всю страницу?Как я могу предотвратить это поведение?
Дополнительный комментарий: похоже, проблема FireFox, поскольку в IE8 эта проблема не возникает!
РЕДАКТИРОВАТЬ:
, чтобы избежать проблемы Iдобавлена проверка перед вставкой в журнал:
$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-->
insertSearchlog.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;
}
}
?>