2013-11-22 122 views
0

我试图通过点击使用AJAX的链接来更新MySQL,但我已经打了一堵墙。我有代码但它不工作。SQL更新通过A HREF

这里的AJAX:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    //bind a listener to "click" event on links with class "markviewed" 
    $('a.markviewed').click(function(event) { 

    //prevent default behavior just in case 
    event.preventDefault(); 

    //get ids from clicked <a> 
    var myid = $(this).attr('data-myid'); 
    var postid = $(this).attr('data-postid'); 

    //ping the address to mark clicked link as viewed 
    $.ajax('http://mywebsite.com/mark_viewed.php?myid=' + myid + '&postid=' + postid'); 

    //redirect to the link in the href attribute 
    window.location.href = $(this).attr('href'); 

    }); 
}); 
</script> 

这应该创建一个A HREF类,当点击命中mywebsite.com/mark_viewed.php与发送为$myid$postid关键变量更新我的数据库。

这里是mark_viewed.php:

<?php 
$con=mysqli_connect("XXX","XXX","XXX","XXX"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

// get values sent from address bar 
$myid=$_GET['myid']; 
$postid=$_GET['postid']; 

mysqli_query($con,"UPDATE comments SET status='viewed' WHERE to_id ='$myid' AND id='$postid'"); 
mysqli_close($con); 
?> 

最后,这是用户看到的链接:

$myid = $row['user_id']; // my id 
$name = $row['board_name']; // collection name 
$boardid = $row['board_id']; // collection id 
$postid = $row['pin_id']; // post id 
$url = $row['pin_url']; // image url 
echo "<li><a href='/board/pins/$boardid/$postid' data-myid=' . $myid . ' data-postid=' . $postid . ' class='markviewed'>"; 
echo "<img src='$url' height='50' width='50'>"; 
echo "New comment in $name."; 
echo "</a></li>"; 

然而,在测试中这是行不通的。点击时的链接只是与新评论和数据库冲突到页面。

我在做什么错?

+0

删除'window.location.href = $(this).attr('href');' – putvande

+0

您的ajax调用是否被创建?如果是这样发生了什么,你是否得到一个错误? – PugFugly

+0

您应该,不需要..在查询中使用之前,您需要验证/清除您的$ myid和$ postid变量。请记住,用户输入是EVIL! – Babblo

回答

0
$(document).ready(function() { 
    $('a.markviewed').click(function(event) { 
    event.preventDefault(); 
    var myid = $(this).attr('data-myid'); 
    var postid = $(this).attr('data-postid'); 
    $.ajax('http://mywebsite.com/mark_viewed.php?myid=' + myid + '&postid=' + postid).done(function(){ 
    window.location.href = $(this).attr('href'); 
}); 

    }); 
}); 

问题AJAX调用函数(但位置变化之前未完成)。所以它正在改变位置。所以等待AJAX​​功能来完成,并在成功回调改变位置

+0

这导致没有活动链接 –

-1

您的AJAX通话没有足够的时间完成。 AJAX中的第一个A表示异步,这意味着下一个命令window.location.href = $(this).attr('href');在您的AJAX调用之后并且在它能够完成之前立即运行。

将搬迁到你AJAX回调,如

//ping the address to mark clicked link as viewed 
    $.ajax('http://mywebsite.com/mark_viewed.php?myid=' + myid + '&postid=' + postid', function(){ 
     //redirect to the link in the href attribute 
     window.location.href = $(this).attr('href'); 
    }); 

你也应该考虑增加的情况下,等待动画您的通话需要很长的时间。

作为一种良好的编码习惯,最好避免劫持像这样的点击,并在目标页面的开头用php记录所需的信息,然后打印新的页面内容。

如果链接是外部链接,您可以链接到重定向页面(redirect.php?target_url = www.externallink.com),该页面会记录所需的信息并立即致电header(Location: "www.externallink.com")。这样用户就不会在您的网站上看到任何可感知的延迟。