2013-11-22 93 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")。這樣用戶就不會在您的網站上看到任何可感知的延遲。