4

在此处输入图像描述

附图显示了我正在构建的搜索引擎的结果页面。对于每个返回结果,用户可以单击结果(即“食品科学”),它将展开手风琴式以显示有关该特定结果的信息。

我想记录用户每次单击结果(用于学习/智能目的)并将其存储在我创建的数据库表中,该表存储会话 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);
         } 
     });
}
4

4 回答 4

3

你可以做这样的事情(未经测试):

在 click 函数之外定义一个 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();

然后,当用户点击页面链接时,阻止默认链接动作,设置订单值和表单动作,然后使用 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.
于 2012-04-03T21:30:05.417 回答
1

使用 jQuery AJAX 向 PHP 页面发送请求。有关更多信息,请参见此处(非常简单):

http://api.jquery.com/jQuery.ajax/

在这种特殊情况下,由于您不需要返回任何内容,因此最好只使用 jQuery 中的 POST 或 GET 方法:

http://api.jquery.com/jQuery.post/ http://api.jquery.com/jQuery.get/

就像是:

$.ajax({
  type: "POST",
  url: "some.php",
  data: "name=John&location=Boston"
  success: function(data){
     alert('done');
});
于 2012-04-03T20:51:30.927 回答
1

这很简单,您需要一个 PHP 脚本来处理从您的搜索页面发送的 AJAX 请求。

在您的搜索页面中,您需要添加一个 .ajax 来为您的脚本创建一个 AJAX 请求。您需要了解的有关 AJAX 的所有信息都可以在这里找到:http: //api.jquery.com/jQuery.ajax/

在您的 PHP 脚本中,您将处理数据库操作,使用 GET 或 POST 数据通过 Ajax 为脚本提供一个 ID。

于 2012-04-03T20:52:41.023 回答
1

使用阿贾克斯。编写一个简单的 php 脚本,将点击写入数据库。我不知道您如何准确记录数据库中的点击,但您可以将点击的项目唯一标识符发送到带有 ajax 的 php 脚本,例如通过 POST 变量。

一个小例子,点击:

$.post(
'count_click.php', 
{ id: "someid" },
function(data) {
// data = everything the php-script prints out
});

php:

if (isset($_POST['id'])) {
// add a click in the database with this id
}
于 2012-04-03T20:55:25.890 回答