【问题标题】:ajax a href onclick get php variable and execute php fileajax a href onclick 获取php变量并执行php文件
【发布时间】:2014-01-30 16:14:28
【问题描述】:

在我问这个问题之前,我已经参考了this question的例子。但是,它似乎不起作用。如果不使用 ajax,我可以删除我的帖子,但是在实现 ajax 之后,deleteAtc.php 似乎无法正常工作。

我的删除页面代码(delete.php)

    <h4>Select an Article to Delete:</h4>

    <?php foreach ($articles as $article) { ?>

        <span><?php echo $article['article_title']; ?></span> <a href="#" id="link">Delete</a><br />

        <script type="text/javascript">
        $(function(){
            $('#link').click(function(){
                var id = <?php echo $article['article_id']; ?>;
                $.ajax({
                    type: "GET",
                    url: "deleteAtc.php",
                    data: "id"+id+,
                    sucess: function() {
                        $('#sucess').html(data);
                    }
                })
                return false;
            });
        });
        </script>
        <div id="success"></div><br />
    <?php } ?>

而我的 deleteAtc.php 代码:

<?php 

session_start();

include_once('../includes/connection.php');

if (isset($_SESSION['logged_in'])) {
    if (isset($_GET['id'])) {
        $id = $_GET['id'];

        $query = $pdo->prepare('DELETE FROM articles WHERE article_id = ?');
        $query->bindValue(1, $id);
        $query->execute();

        echo "Article deleted";
    }
}    
?>

我在这里要做的是删除记录而不重定向到deleteAtc.php,它将删除记录并替换Article Deleted

我可以知道我在 ajax 方面哪里出错了吗?

请参阅下面的更新问题


根据下面的答案,这是我更新的代码:

删除.php

<h4>Select an Article to Delete:</h4>

<div id="message"></div>

<?php foreach ($articles as $article) { ?>

<span><?php echo $article['article_title']; ?></span> 
<a href="#" class="link" data-artid="<?php echo $article['article_id']; ?>">Delete</a><br />
<?php } ?>

脚本

<script type="text/javascript">
        $(function(){
            $('.link').click(function(){
                var elem = $(this);
                $.ajax({
                    type: "GET",
                    url: "deleteAtc.php",
                    data: "id="+elem.attr('data-artid'),
                    dataType:"json",  
                    success: function(data) {
                        if(data.success){
                               elem.hide();
                               $('#message').html(data.message);
                        }
                    }
                });
                return false;
            });
        });
        </script>

deleteAtc.php

<?php 

session_start();

include_once('../includes/connection.php');

if (isset($_SESSION['logged_in'])) {
    if (isset($_GET['id'])) {
        $id = $_GET['id'];

        $query = $pdo->prepare('DELETE FROM articles WHERE article_id = ?');
        $query->bindValue(1, $id);
        $query->execute();

        //Also try to handle false conditions or failure
        echo json_encode(array('success'=>TRUE,'message'=>"Article deleted"));
    }
}    
?>

不知何故,如果我一次删除两条记录,只有第一条记录回显结果,第二条删除的结果不会回显结果。

我想知道,是否可以将 jquery 动画添加到 .show 成功消息和 .hide 已删除记录?

【问题讨论】:

  • 语法错误意外令牌"id"+id+,
  • data: "id"+id 更改为 data: "id=&lt;?php echo $article['article_id']; ?&gt;"
  • @Musa 它没有显示这个错误,这就是为什么我要找出问题所在,我可以知道为我想要的输出做的正确方法是什么吗?
  • @Nouphal.M 是的,现在它可以工作了,但它没有回显结果并隐藏已删除的记录
  • sucess: function() { 应该是success: function(data) {,然后data 将包含来自服务器的消息。在下面的行中,它也应该是 #success 而不是 #sucess

标签: php jquery sql ajax animation


【解决方案1】:

上面的脚本不起作用,你必须像下面这样改变。您一次又一次地重复相同的标识符功能。将 jquery 脚本排除在 foreach 循环之外。您必须添加带有文章 ID 的类属性。

<h4>Select an Article to Delete:</h4>

    <?php foreach ($articles as $article) { ?>

        <span><?php echo $article['article_title']; ?></span> <a href="#" id="link" class='<?php echo $article['article_id']; ?>' >Delete</a><br />

        <div id="success"></div><br />
    <?php } ?>


        <script type="text/javascript">
        $(function(){
            $('#link').click(function(){
                var id = $(this).prop('class');
                $.ajax({
                    type: "GET",
                    url: "deleteAtc.php",
                    data: "id="+id,
                    sucess: function() {
                        $('#sucess').html(data);
                    }
                })
                return false;
            });
        });
        </script>

【讨论】:

    【解决方案2】:

    您使用id="link" 创建了多个链接。 ID 必须是唯一的。

    你必须写

    id="link<? echo $article['article_id']; ?>"
    

    还有

    $('#link<? echo $article["article_id"]; ?>').click(function() {...})
    

    【讨论】:

      【解决方案3】:

      首先,ID 不是重复的,而是使用类选择器。您也可以使用自定义数据属性来存储文章的 id。

      试试

      <h4>Select an Article to Delete:</h4>
      
      <div id="message"></div>
      
      <?php foreach ($articles as $article) { ?>
      
      <span><?php echo $article['article_title']; ?></span> 
      <a href="#" class="link" data-artid="<?php echo $article['article_id']; ?>">Delete</a><br />
      <?php } ?>
      

      脚本

      <script type="text/javascript">
              $(function(){
                  $('.link').click(function(){
                      var elem = $(this);
                      $.ajax({
                          type: "GET",
                          url: "deleteAtc.php",
                          data: "id="+elem.attr('data-artid'),
                          dataType:"json",  
                          success: function(data) {
                              if(data.success){
                                     elem.hide();
                                     $('#message').html(data.message);
                              }
                          }
                      });
                      return false;
                  });
              });
              </script>
      

      在服务器端

      <?php 
      
      session_start();
      
      include_once('../includes/connection.php');
      
      if (isset($_SESSION['logged_in'])) {
          if (isset($_GET['id'])) {
              $id = $_GET['id'];
      
              $query = $pdo->prepare('DELETE FROM articles WHERE article_id = ?');
              $query->bindValue(1, $id);
              $query->execute();
      
              //Also try to handle false conditions or failure
              echo json_encode(array('success'=>TRUE,'message'=>"Article deleted"));
          }
      }    
      ?>
      

      【讨论】:

      • 您的 json 部分不起作用,我将其更改为此代码 echo json_encode("'success'=&gt;TRUE,'message'=&gt;'Article deleted'"); 但不知何故,成功消息没有显示,记录也没有隐藏。但是记录被删除了
      • 已更改为您建议的代码,但 echo 部分和 hide 元素似乎不起作用
      • 更改了代码,但回显结果和隐藏已删除记录不起作用,似乎是脚本方面的?删除记录有效,但脚本无效
      • success 函数中缺少一个 c,对其进行了编辑。输入错误。但这不是我知道的借口。是sucess。为我的无知道歉。 :)
      • 谢谢!回答投票并接受。只是想知道为什么如果我一次删除两个,它只回显一次,这是第一条记录,第二条记录它不会回显。顺便问一下,jquery-ui的显示和隐藏可以实现吗?
      【解决方案4】:
      <script language="javascript">
      $(document).ready(function() {
      
          $(".delbutton").click(function(){
          var element = $(this);      
          var del_id = element.attr("id");
          var info = 'id=' + del_id;
              if(confirm("Sure you want to delete this record? There is NO undo!"))
              {
                  $.ajax({
                       type: "GET",
                      url: "products/delete_record.php",
                      data: info,
                      cache: false,
                      success: function(){
                          setTimeout(function() {
                              location.reload('');
                          }, 1000);
                      }
                  });
                      $(this).parents(".record").animate({ backgroundColor: "#fbc7c7" }, "fast")
                      .animate({ opacity: "hide" }, "slow");      
              }
              return false;
              //location.reload();
          });
      });
      </script>
      

      【讨论】:

        猜你喜欢
        • 2017-02-14
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        • 2019-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多