javascript - 无法更新每个按钮,仅使用 JavaScript 和 AJAX 更新第一个按钮

标签 javascript php html mysql ajax

我创建了自己的“喜欢”按钮。使用 AJAX,我可以将更改发布到数据库以将 1 添加到“喜欢”按钮。然后 JavaScript 将使用更新后的信息更新第一个“喜欢”按钮。如果我再次点击“喜欢”,它就不会再次更新。此外,其他“喜欢”按钮都不起作用,它们只会刷新页面。

我已经到处搜索试图找到这个问题的答案。我已经把它归结为每个喜欢的按钮都有自己的 id。即使我将按钮的 id 传递到 AJAX 中,然后从服务器返回到 JavaScript。我仍然无法更新其他“喜欢”按钮。只有第一个,而且只有一次。

<html>
<script>
window.addEventListener("load", function () {
  function sendData() {
    var XHR = new XMLHttpRequest();

    // Bind the FormData object and the form element
    var FD = new FormData(form);

   	XHR.onload = () =>{
   		var response
   		try{
   		response = JSON.parse(XHR.responseText);
   		}catch (e){
   			console.error('no parse');
   		}
   		if(response){
   			handleresponse(response);
   		}
   	}
    // Set up our request
    XHR.open("POST", "likes.php");

    // The data sent is what the user provided in the form
    XHR.send(FD);

   
  }
 
  // Access the form element...
  
  var form = document.getElementById("likesform");

  // ...and take over its submit event.
  form.addEventListener("submit", function (event) {
    event.preventDefault();

    sendData();
  });
});
function handleresponse(response){
	console.log(response.message);
	let value = response.message;
	let id = response.id;
	console.log(id);
	document.getElementById(id).value = "Liked " + value;
	value = 0;
	id = 0;
}
</script>
<?php

function postcommentbar($imagenumber, $likes, $num_rows){




	echo "<div id='postcommentbar'>";
	echo "<form id='likesform' ><input type='hidden' name='imagenumber' value='".$imagenumber."'><input type='hidden' name='like' value='Like'><input type='hidden' name='likes' value='".$likes."'><input type='submit' class='likebutton' id='".$imagenumber."'  value='Like ".$likes."'></form>";

	echo "<form action='comments.php' method='POST'><input type='hidden' name='imagenumber' value='".$imagenumber."'><input id='commentbutton' type='submit' name='comment' value='Comment ".$num_rows."'></form>";
	echo "</div>";
	$num_rows = 0;
	
}

?>

我希望能够点击页面上的任何“喜欢”按钮,并看到它随着“喜欢”数量的增加而相应更新。

您能否告诉我如何实现这一目标?

我在发送之前已经加载了。如果你看一下代码,你就会看到这一点。

最佳答案

正如您建议的那样,您使用图像编号作为标识符。我已经更新了我的代码,这应该适用于您的代码。

我已经实现了 php 代码来动态生成数字并将它们绑定(bind)以获得唯一名称,然后将它们发送到 sendData 函数。此代码在我这边执行得很好。

请看一下,如果这有帮助

<body>
<?php 
    for($i=1;$i<=3;$i++){
        ?>
        <div>
    <form id='likesform<?= $i ?>' ><input type='hidden' name='imagenumber' value='imagenumber<?= $i ?>'><input type='hidden' name='like' value='Like'>
        <input type='hidden' name='likes' value='adas'><input type='button' class='likebutton' id='imagenumber<?= $i ?>'  value='Like' onclick="sendData('likesform<?= $i ?>')">
    </form>
</div>
        <?php
    }
?>
</body>

<script type="text/javascript">
function sendData(form_id){
    var XHR = new XMLHttpRequest();
    var form = document.getElementById(form_id);
    var FD = new FormData(form);
    XHR.onload = () =>{
        var response
        console.log(XHR.responseText);
        try{
        response = JSON.parse(XHR.responseText);
        }catch (e){
            console.error('no parse');
        }
        if(response){
            handleresponse(response);
        }
    }
    // Set up our request
    XHR.open("POST", "likes.php");

    // The data sent is what the user provided in the form
    XHR.send(FD);
}

function handleresponse(response){
    // console.log(response.message);
    let value = response.message;
    let id = response.id;
    console.log(id);
    document.getElementById(id).value = "Liked " + value;
    value = 0;
    id = 0;
}
</script>

我还创建了一个名为“likes.php”的文件。这是我从该文件发送并附加 DOM 的输出。

<?php 
echo json_encode(array('message' => 1, 'id' => $_POST['imagenumber']));
?>

使用下面的函数更新您的函数。我对您的 html 绑定(bind)进行了一些更改。问题是您没有正确转义引号。 尝试使用这个功能,这会起作用。

<?php
function postcommentbar($imagenumber, $likes, $num_rows){
echo "<div id='postcommentbar'>"; echo "<form id='".$imagenumber."' ><input type='hidden' name='imagenumber' value='".$imagenumber."'><input type='hidden' name='like' value='Like'><inputtype='hidden' name='likes' value='".$likes."'><input type='button' class='likebutton' id='".$imagenumber."' onclick=\"sendData('$imagenumber')\" value='Like ".$likes."'></form>";
}
?>

这段代码在我这边不会产生任何语法错误。

希望这有帮助

谢谢

关于javascript - 无法更新每个按钮,仅使用 JavaScript 和 AJAX 更新第一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57912669/

相关文章:

php - 使用 php + xpath 以文本形式获取节点值

html - CSS :nth-child randomly skips a list item

javascript - 如何在模板范围之外使用 Angular 局部变量?

javascript - AS/400数据队列可以访问node-jt400吗? (javascript)

javascript - 为什么我的分析事件没有被注册?

javascript - 等待循环返回一个值

php - 掌握基础知识的简单面向对象练习

php - 使用 paypal api 支付没有重定向

javascript - 有没有更简洁的方式来编写JS来显示和隐藏?

javascript - 在 Chrome 应用中使用 Chrome 扩展程序