【问题标题】:jQuery AJAX post to PHP everytime a click is fired off每次点击被触发时,jQuery AJAX 都会发布到 PHP
【发布时间】:2013-11-20 16:50:18
【问题描述】:

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

【问题讨论】:

  • 你的警报(“Inside div”)被触发了吗?
  • 是的。这样可行。它只是不发送 POST。我知道该模型也可以工作,因为如果我 !isset 会在 DB 中创建一条记录
  • 试试$.ajax({ type: "POST", url: "tq/--record-events.inc.php", data: {dataString : dataString} });
  • @Dheed 不起作用。
  • 您可以尝试打印/转储 $_POST 数组吗? var_dumpfile_put_content('array', print_r($_POST,true));

标签: javascript php jquery ajax pdo


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    尝试将 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);
            }
        }); 
    }
    

    【讨论】:

    • 链接由托管在第三方服务器上的 JS 脚本动态生成。截至目前,我没有点击 div 中的链接。我只是单击 DIV。不过我明白你的意思。
    • 您是否尝试在 ajax 调用中添加 successerror 处理程序以查看是否遇到任何问题?
    • 不——我没有。我怎样才能做到这一点?我只是在 Firefox 中查看 JavaScript 控制台,它没有注册任何错误。
    • Ajax 调用在遇到服务器端问题时不会引发 javascript 错误。我会更新我的答案,提出如何做的建议。
    • 服务器端不是问题,因为如果!isset 并重新加载页面 - 数据库记录插入成功。 (这消除了服务器端错误,不是吗?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多