所附图片显示了我正在构建的搜索引擎的结果页面。对于每个返回结果,用户可以单击结果(即“食品科学”),它会展开 Accordion 样式以显示有关该特定结果的信息。
我想记录每次用户点击结果(用于学习/情报目的)并将其存储在我创建的数据库表中,该表存储 session ID、查询、结果的位置和用户点击项目的顺序。
使用 JQuery,我已经有一个函数可以提取被点击结果的标题,我已经设置了我想要记录点击的位置,但我不知道该怎么做,因为 JQuery 是客户端端,PHP 是服务器端。
如何使用 JQuery 触发 PHP 函数,以便查询数据库以将点击日志插入到我的表中?
下面是 JQuery 函数。
$(document).ready(function() {
$('.accordionButton').click(function(e) {
if($(this).next().is(':hidden') == true) {
$(this).addClass('on');
$(this).next().slideDown('normal');
$(this).next().slideDown(test_accordion);
// SEND CLICK ACTION TO LOG INTO THE DATABASE
alert($(this).find('h3:last').text()); // displays the title of the result that was just clicked
}
else {
$(this).removeClass('on');
$(this).next().slideUp('normal');
$(this).next().slideUp(test_accordion);
}
});
}
最佳答案
你可以这样做(未经测试):
在点击函数之外定义一个 javascript 变量来跟踪点击的顺序:
var order = 0;
将其添加到底部的点击功能中:
order++;
var sessionID = $("input[name='sessionID']").val(); // assuming you have sessionID as the value of a hidden input
var query = $("#query").text(); // if 'query' is the id of your searchbox
var pos = $(this).index() + 1; // might have to modify this to get correct index
$.post("logClick.php", {sessionID:sessionID, query:query, pos:pos, order:order});
在名为“logClick.php”的 php 脚本中(在同一目录中):
<?php
// GET AJAX POSTED DATA
$str_sessionID = empty($_POST["sessionID"]) ? '' ; $_POST["sessionID"];
$str_query = empty($_POST["query"]) ? '' ; $_POST["query"];
$int_pos = empty($_POST["pos"]) ? 1 ; (int)$_POST["pos"];
$int_order = empty($_POST["order"]) ? 1 ; (int)$_POST["order"];
// CONNECT TO DATABASE
if ($str_sessionID && $str_query) {
require_once "dbconnect.php"; // include the commands used to connect to your database. Should define a variable $con as the mysql connection
// INSERT INTO MYSQL DATABASE TABLE CALLED 'click_logs'
$sql_query = "INSERT INTO click_logs (sessionID, query, pos, order) VALUES ('$str_sessionID', '$str_query', $int_pos, $int_order)";
$res = mysql_query($sql_query, $con);
if (!$res) die('Could not connect: ' . mysql_error());
else echo "Click was logged.";
}
else echo "No data found to log!";
?>
如果您想查看脚本中是否发生错误,您可以添加一个回调函数作为 $.post() ajax 方法的第三个参数:
$.post("logClick.php", {sessionID:sessionID, query:query, pos:pos, order:order},
function(result) {
$('#result').html(result); // display script output into a div with id='result'
// or just alert(result);
})
);
编辑:如果您需要 order 变量的值在页面加载之间保持不变,因为您对结果进行了分页,那么您可以使用 GET 或 POST 在页面之间传递此变量的值。然后,您可以将该值保存在隐藏的输入中,并使用 jQuery 轻松读取它。 (或者您也可以使用 cookie)。
示例(将其放在每个结果页面中):
<?php
$order = empty($_POST["order"]) ? $_POST["order"] : "0";
$html="<form id='form_session' action='' name='form_session' method='POST'>
<input type='hidden' name='order' value='$order'>
</form>\n";
echo $html;
?>
在您的 jQuery 中,只需将 var order = 0;
更改为
var order = $("input[name='order']").val();
然后,当用户点击页面链接时,阻止默认链接 Action ,设置顺序值和表单 Action ,然后使用javascript/jQuery提交表单:
$("a.next_page").click(function(event) {
event.preventDefault();
var url = $(this).attr("href");
$("input[name='order']").val(order);
$("#form_session").attr('action', url).submit();
});
必须为所有“下一个”和“上一个”分页链接指定相同的类(即“下一页”(在本例中)。
编辑:如果您的分页如下:
<div class='pagination'>
<ul><li><a href='page1.url'>1</a></li>
<li><a href='page2.url'>2</a></li>
</ul>
</div>
然后改变这个:
$("div.pagination a").click(function(event) {
etc.
关于php - 结合 JQuery/PHP 将点击记录到数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10001075/