【发布时间】:2014-11-15 02:10:39
【问题描述】:
我正在尝试学习 Jquery Ajax。我有一个使用 while 循环来显示 sql 行的页面。我正在尝试编写一个脚本,允许用户使用提交按钮异步删除一行。此外,该脚本将删除存储在服务器上的两个文件(其 URL 存储在 db 行中)。我已经为此工作了几天,我确信不止一个错误。我在这里寻找一些关于如何让这个工作的建议。
截至目前,当用户点击时,它会指向空白页面。行和文件没有被删除,并且 js(confirm("")) 没有弹出。
html
<form action="delete_list.php" method="POST" id="delete_form">
<input type="hidden" id="id" value="<?php echo $id ?>" name="id" />
<input type="hidden" id="ad_link" value="<?php echo $ad_link ?>" name="ad_link" />
<input type="hidden" id="listing_img" value="<?php echo $listing_img ?>" name="listing_img" />
<input type="submit" name="delete" value="Submit" />
</form>
js
<script type="text/javascript">
$(function() {
$(document).on('click', '.delete', function() {
var element = $(this);
var del_id = element.attr("id");
var info = 'id=' + del_id;
var del_file = element.attr("ad_link");
var info = 'ad_link=' + del_file;
var del_img = element.attr("listing_img");
var info = 'listing_img=' + del_img;
if (confirm("Are you sure you want to delete this listing?")) {
$.ajax({
type: "POST",
url: "delete_list.php",
data: info,
success: function() {}
});
}
return false;
});
});
</script>
php(在单独的页面上) - 是否最好将它与 html 放在同一页面上?
<?php
require('../dbcon2.php');
if (isset($_POST['id']) && ($_POST['ad_link']) || ($_POST['listing_img'])) {
$idc = $_POST['id'];
unlink($_POST['ad_link']);
unlink($_POST['listing_img']);
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("DELETE FROM listings WHERE id = $idc");
$stmt->execute();
}
catch (PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
}
$url = 'http://website.com/members_area/delete_listings.php';
while (ob_get_status()) {
ob_end_clean();
}
header("Location: $url");
?>
【问题讨论】:
-
您正在绑定
.on('click','.delete',但您的表单中没有class="delete",只有name="delete" -
@Sean 好的,这似乎有帮助。该行现在正在删除,但它仍然进入 php 页面,并停在那里,所以我很困惑我认为异步数据传输的重点是这样你就不必去另一个页面?我应该在表单中包含页面上的 php 吗?
-
这取决于您要绑定的元素,以及
return false;适用的内容,以及它是否阻止重定向。我将发布一个更简化的示例作为答案。