在PHP循环中的JQuery Post工作并不完美

时间:2017-08-17 18:10:21

标签: javascript php jquery html

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

list.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>

和wishdelete2.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' ");
}
?>

1 个答案:

答案 0 :(得分:0)

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

正如the documentation of jQuery.post中所述,您可以简单地在数据之后传递函数,如下所示:

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

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

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