每次点击都会触发jQuery AJAX发布到PHP

时间:2013-11-20 16:50:18

标签: javascript php jquery ajax pdo

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

客户点击div>内的链接ajax在db>中插入记录客户端被发送到点击链接的网站

页面上的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帖子没有被发送。有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

你的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参数。 希望这有帮助

答案 1 :(得分:0)

尝试将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);
        }
    }); 
}
相关问题