问题很简单。每当用户点击“喜欢”时,我想使用javascript通过ajax更新mysql数据库。我已经尝试了所有方法有点找不到任何帮助。我知道我还需要服务器端脚本,但是ajax是主要问题。
这是我设置的计数器代码。
document.observe("dom:loaded", function()
{
$("likeForumLink").onclick=processForumLike;
});
function processForumLike(event)
{
var numberOfLikes=parseInt($("hiddenLikes").value);
numberOfLikes+=1;
$("hiddenLikes").value=numberOfLikes+"";
this.innerHTML="You liked this";
if(numberOfLikes==1)
{
$("numberOfLikes").innerHTML="("+numberOfLikes+" like)";
}
else
{
$("numberOfLikes").innerHTML="("+numberOfLikes+" likes)";
}
var likes=$("hiddenLikes").value;
new Ajax.Request("seeForum.php?id=$("subjectId").value", {
method:'get',
parameters:{hiddenLikes:likes},
onSuccess: ???? //Don't know
onComplete:??? //Don't know
on Failure:???? //Don't know
});
}
然后我可以使用我的服务器端脚本,如下所示。
附:它位于同一页"seeForum.php?subjectId=$("subjectId").value"
<?php if(isset($_GET["hiddenLikes"]))
{
$updateQuery="UPDATE `subject table` SET `likes`='".$_GET["hiddenLikes"]."' where `subjectId`='".$_REQUEST['subjectId']."' ";
$result=mysql_query($updateQuery);
checkConnect($result,"query of $updateQuery");
?>
请帮忙。我的所有工作都停止了。
答案 0 :(得分:2)
首先,您不应该使用GET请求来更新数据,这应该是POST。这个:
"seeForum.php?id=$("subjectId").value"
不会做你认为它做的事情。它所做的是导致语法错误,因为它看起来像JavaScript解释器的"x" x "x"
而不是JavaScript。我不确定您使用的是哪个JavaScript库(也许是Prototype?)但我认为您可能希望将所有参数都放入parameters
以避免担心URL编码等问题。此外,没有理由告诉服务器你已经拥有多少“喜欢”,并且有充分的理由不这样做:有人可能已经“喜欢”了这个页面,而你正在查看你现在拥有的一些喜欢的内容。错误;所以根本不需要hiddenLikes
。
这样的事情在JavaScript方面会更好:
new Ajax.Request("likeIt.php", {
method: 'post',
parameters: { id: $('subjectId').value },
onSuccess: function(transport) {
// Update the "likes" label with something like this,
// I'm not that familiar with Prototype though so I'm
// guessing.
$('likes_label').update(transport.responseText);
},
onComplete: ???? // The function to call when it has finished.
onFailure: ???? // The function to call when it doesn't work.
});
然后,在PHP中,只需向数据库发送一个简单的UPDATE即可增加likeIt.php
中的喜欢数量,如下所示:
<?php
# Perform whatever authentication you need...
if(isset($_POST["id"])) {
# Set up your database connection and then...
$result = mysql_query("UPDATE `subject_table` SET `likes` = `likes` + 1 WHERE `subjectId` = '" . mysql_real_escape_string($_POST["id"]) . "'");
# Check $result and send some data back to the client (if desired), if
# you send something back then the onComplete, onFailure, and onSuccess
# JavaScript functions would be responsible for doing something with it.
}
# Send back the updated number of "likes" as text/plain.
?>
答案 1 :(得分:0)
仔细思考,如果用户点击了,你真正想做的就是在页面本身中增加类似的计数器。您可以在onComplete: function(){ increment the like counter }
中执行此操作。如果确实发生了某种错误,我认为你不想将它显示给用户,取决于你想要如何处理该部分,许多方法,你可以记录错误。