【问题标题】:Jquery Ajax not passing multiple valuesJquery Ajax 不传递多个值
【发布时间】: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; 适用的内容,以及它是否阻止重定向。我将发布一个更简化的示例作为答案。

标签: php jquery ajax pdo


【解决方案1】:

由于您使用 ajax 提交,因此无需创建完整的表单,只需将其简化为一个按钮即可。此外,获取所有需要的值并将它们添加为 data- 属性。

<button class="delete" data-id="<?php echo $id ?>" data-ad_link="<?php echo $ad_link ?>" data-listing_img="<?php echo $listing_img ?>" >Delete</button>

那么你的js就可以简化为

<script type="text/javascript">
    $(function() {
        $(document).on('click', '.delete', function() {
            var element = $(this);

            if (confirm("Are you sure you want to delete this listing?")) {
                $.ajax({
                    type: "POST",
                    url: "delete_list.php",
                    data: {id: element.data("id"), ad_link: element.data("ad_link"), listing_img: element.data("listing_img") },
                    success: function() {}
                });
            }
            return false;
        });
    });
</script>

此外,由于您使用的是PDO-&gt;prepare(),因此在您的 php 中您应该使用占位符

$stmt = $conn->prepare("DELETE FROM listings WHERE id = ?");
$stmt->execute(array($idc));

【讨论】:

  • 很好的答案和解释。欢迎来到 10k
【解决方案2】:

您的 jquery 文件和 html 代码有问题。

首先为您在 jquery 文件中使用的提交按钮指定一个类。

并将按钮类型属性设置为按钮。

<input type='button' class='delete' name='delete' />

并从你的表单标签中移除 action 属性。

然后像这样做你的 jquery 的东西

<script type="text/javascript">
    $(document).ready(function(){
        $(document).on('click','.delete',function(){


            var info = '';
                info += 'id='+$('#id').val();
                info += '&adlink='+$('#ad_link').val();
                info += '&listing_img='+$('#listing_img').val();

            if( confirm( 'Are you sure you want to delete?' ) ){
                $.ajax({
                    type:'POST',
                    url:'yourfile.php',
                    data:info,
                    success:function(){ }
                });
            } else {
                return false;
            }
        }
    });
</script>

【讨论】:

  • 谢谢。所以我把最后一行从 } 改为 });并调整了url,将&adlink替换为&ad_link。删除表单中的操作并将 html 更改为您所说的内容。当我点击按钮时,没有任何反应,也没有任何内容被删除。
  • 打开您的浏览器控制台并检查单击按钮时发生的情况。
  • 使用萤火虫,好的,这对我有一个我添加的表单类有帮助。所以它正在删除但它没有显示它。换句话说,我必须刷新页面才能看到已删除的项目。我怎么让它滑下来?
  • 表示记录被删除。伟大的!!。现在您想在不刷新页面的情况下删除元素。因为你想使用 $(element).remove() 方法来删​​除元素。在你的 ajax 成功函数中使用它。
  • @Munshit Azhar 我放弃了!所以我将 sql 行包裹在
    中,所以如果我使用成功:function(){$('.record'+id).remove();它不会删除或任何东西。不管在这里给你答案,如果你能帮助我解决 remove() 问题,我将非常感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2010-12-27
相关资源
最近更新 更多