我希望每次用户点击结果时进行记录(出于学习/智能目的)并将其存储在我创建的数据库表中,该表存储会话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});
在你的PHP脚本名为“logClick.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",order:order},function(result) { $('#result').html(result); // display script output into a div with id='result' // or just alert(result); }) );
编辑:如果您需要在页面加载之间保持order变量的值,因为您对结果进行了分页,那么您可以使用GET或POST在页面之间传递此变量的值.然后,您可以将值保存在隐藏的输入中,并使用jQuery轻松读取它. (或者你也可以使用cookies).
示例(将其放在每个结果页面中):
<?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();
然后,当用户单击页面链接时,阻止默认链接操作,设置订单值和表单操作,然后使用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(); });
所有“下一个”和“前一个”分页链接必须被赋予相同的类(即“next_page”(在此示例中).
编辑:如果你的分页如下:
<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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。