每次点击一次,jQueryAJAX就会发布到PHP

jQuery AJAX post to PHP everytime a click is fired off

本文关键字:PHP jQueryAJAX 一次      更新时间:2023-09-26

我想记录页面上特定DIV和子DIVS内发生的每次单击。客户不应该意识到这一点。div的内部是指向外部网站的链接。

客户端点击div>ajax在数据库中插入记录>客户端被发送到点击链接的站点

页面上的PHP

include('quotemaster/dbmodel.inc.php');
if(isset($_POST['dataString'])) {
    clickCounter();
}

PHP模型函数

function clickCounter() {
    global $host, $user, $pass, $dbname;
        try {
            $DBH = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
            $stmt = $DBH->prepare("INSERT INTO clickcounter (counter) VALUES (1)");
            $stmt->execute();
        }
        catch (PDOException $e) {
            echo $e->getMessage();
        }
}

AJAX POST

$(function() {
    $("body").click(function(e) {
        if (e.target.id == "results" || $(e.target).parents("#results").size()) { 
            //alert("Inside div");
            ajax_post();
        } 
    });
})
function ajax_post() {
    var dataString = 'CC='+1;  
    $.ajax({ type: "POST", url: "tq/--record-events.inc.php",  data: dataString }); 
}

我遇到的问题(我想)是AJAX邮件没有发送。有什么想法吗?谢谢

在您的PHP上,您有

if(isset($_POST['dataString'])) {...

您需要一个名为dataString的参数,这样您就可以用之类的东西在javascript ajax_post函数中修复它

var postData={dataString:true, CC:1}
$.ajax({ type: "POST", url: "tq/--record-events.inc.php",  data: postData });

通过这种方式,jQuery将创建正确的dataString参数。希望这能帮助

尝试将POST检查更改为:

if(isset($_POST['CC'])) {
    clickCounter();
}

此外,如果您的DIV包含一个远离页面的链接,则单击该链接可能会导致页面位置在事件冒泡到正文标记之前发生更改。如果是这样,您可以尝试将一个事件附加到调用preventDefault的链接,从而允许事件冒泡。如果是这样,您可以检测到用户点击了链接,并在记录点击后手动执行导航。为了向代码展示如何实现这一点,您需要发布完整的div代码(包括链接)。

向ajax调用添加回调:

function ajax_post() {
    var dataString = 'CC='+1;  
    $.ajax({
        type: "POST",
        url: "tq/--record-events.inc.php", 
        data: dataString,
        success: function(data) {
            console.log(data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(errorThrown);
        }
    }); 
}