php循环中的JQuery帖子并不完美



我有以下列表.php它创建了一个包含项目的列表和一个按钮(Erledigt!(,该按钮将Jquery帖子发送到wishdelete2.php。问题是 JQuery 帖子工作不完美:有一次我需要按按钮 3 倍或 5 倍,然后 Jquery 处理。但是我希望我只需要 1x 并且处理 Jquery 帖子。我必须更改什么?

列表.php:

<html lang="de">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
<title>Wünsche</title>
<!-- <script src="../jquery.min.js"></script> -->
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<style>
table{
width:100%; 
border-collapse:collapse; 
}
table th{
padding:5px; 
border:#5f5f5f 1px solid;
}
table td{
padding:5px; 
border:#5f5f5f 1px solid;
}
table tr{
background: #bbbbbb;
}
table tr:nth-child(4n){
background: #e3e3e3;
}
</style>
</head>
<div id="resulter"></div>
<body>
<h3>Wünsche</h3>
<table>
<tr><th>Zeit</th><th>IMDB-ID</th><th></th><th></th><th>Counter</th><th>Titel</th><th>Art</th></tr>
<?php
$pdo = new PDO('mysql:host=********;dbname=********;charset=utf8', '********', '********');
$sql = "SELECT * FROM ******** WHERE not marker = 'oU' ORDER BY cast(counter as int) DESC, timestamp ";
foreach($pdo->query($sql) as $row) {
$id = $row['id'];
$timestamp = $row['timestamp'];
$counter = $row['counter'];
$art = $row['art'];
$imdbid = $row['imdb_id'];
$title = $row['title'];
$language = $row['language'];
$aufloesung = $row['aufloesung'];
$marker = $row['marker'];
?>
<tr><td><?php echo $timestamp ?></td><td><?php echo $imdbid ?></td><td><?php echo $language ?></td>
<td><?php echo $aufloesung ?></td><td class="counter"><?php echo $counter ?></td><td class="title" style=""><?php echo $title ?></td><td><?php echo $art ?></td><td><?php echo $marker ?></td>
<td style="padding:0;"><button class="<?php echo $id ?>">Erledigt!</button>
<select class="marker<?php echo $id ?>"><option></option><option>oD</option><option>oDwE</option><option>wE</option><option>oE</option><option>oU</option></select></td></tr>
<script>
$(document).ready(function(){
$(".<?php echo $id ?>").click(function(){
var id = "<?php echo $id ?>",
marker =  $(".marker<?php echo $id ?>").val();
$.post("wishdelete2.php", 
{ id:  id,
marker: marker
});
location.reload();
});
});
</script>
<?php } ?>
</table>
</body>
</html>

和愿望删除2.php:

<?php
$con=mysqli_connect("********","********","********","********");
$id = mysqli_real_escape_string($con, $_POST['id']);
$marker = mysqli_real_escape_string($con, $_POST['marker']);
mysqli_close($con);
$pdo = new PDO('mysql:host=********;dbname=********;charset=utf8', '********', '********');
if(empty($marker)){
$stmt = $pdo->query("DELETE FROM ******** WHERE id='$id' ");
}else{
$stmt = $pdo->query("UPDATE ******** SET marker='$marker', IP='' WHERE id='$id' ");
}
?>
jQuery.post

是一个异步函数,即一旦该函数返回,请求就不会被发送。问题是您在调用location.reload()后立即调用post,因此在大多数情况下,在浏览器重新加载页面之前不会发送您的请求。如果要在发送 post 请求后重新加载页面,请将处理程序传递给post,例如传递给success事件。

jQuery.post的文档中所述,您可以简单地在数据后传递一个函数,如下所示:

$.post(
"wishdelete2.php", 
{id: id, marker: marker},
function () { location.reload(); }
);

请注意,此处理程序是success处理程序,因此只有在 post 请求成功时才会调用。如有必要,您可能需要查看链接的文档并提供错误处理程序以通知用户故障。

此外,您应该考虑添加一些指示,表明页面正在等待发布请求。您可以在谷歌上加载微调器,以查找常用的动画图形,表明有一个脚本在后台加载某些内容。当然,显示这样的微调器只是表明这一点的一种方式。要有创意。

最新更新