【问题标题】:aJax update a specific row in sqlite and php using a buttonaJax 使用按钮更新 sqlite 和 php 中的特定行
【发布时间】:2016-12-26 20:44:35
【问题描述】:

我有一个表格,其中列出了用户输入的值,侧面有 2 个按钮可以删除或标记为已完成。在页面上表格是可见的,有3个标签,我们称它们为Tab1、Tab2和Tab3

每个选项卡都有一个表格(如上所述),其中包含有关特定条目类型的信息。

这些按钮是简单的<a href> 链接,因此当单击它们时它们会重新加载页面。这是一个问题,因为用户视图会被刷新,并且它会将选项卡带回默认选项卡,并且在尝试标记多个条目时也会带来不便。

我想让这些按钮将 Ajax 请求发送到另一个页面以处理数据。唯一的问题是,我不太确定如何进行 ajax 调用。

这就是我现在拥有的

我的按钮

            echo "<td class='td-actions'>";
                echo "  <a href='?complete=".$row['uniqueID']."' class='btn btn-success btn-small'>
                            <i class='btn-fa fa-only fa fa-check'> </i>
                        </a> 
                        <a href='?remove=".$row['uniqueID']."' class='btn btn-danger btn-small'>
                            <i class='btn-fa fa-only fa fa-remove'> </i>
                        </a>";
            echo "</td>";

有一种叫做 Complete,一种叫做 Remove。

当其中任何一个被按下时,它当前会重新加载触发一些 php if 语句的页面。

       if(isSet($_GET['remove'])) {
            $sql = "DELETE from rl_logged where uniqueID='".$_GET['remove']."';";
            $ret = $db->exec($sql);
            echo "<meta http-equiv='refresh' content='0;index.php' />";
        }

        if(isSet($_GET['complete'])) {
            $sql = "UPDATE rl_logged set complete=1 where uniqueID='".$_GET['complete']."';";
            $ret = $db->exec($sql);
            echo "<meta http-equiv='refresh' content='0;index.php' />";
        }

这些都是比较简单的功能。我的问题是我不太了解javascript。

任何帮助将不胜感激。

我想出的javascript是这个

                    $(document).ready(function() {
                        $('#markComplete').click(function() {
                            var input = input = $(this).text()
                            $.ajax({ // create an AJAX call...
                                data: {
                                    onionID: input,
                                },
                                type: 'POST', // GET or POST from the form
                                url: 'pages/ajax/markCompleteRL.php', // the file to call from the form
                                success: function(response) { // on success..
                                   refreshAllTabsWithFade();
                               }
                           });
                        });
                    });

使用此按钮

                            <div name='markComplete' id='markComplete' class='btn btn-success btn-small'>
                                <i class='btn-fa fa-only fa fa-check'></i>".$row['uniqueID']."
                            </div> 

但是,在使用 firebug 进行检查时,这似乎可以工作一次,但现在按钮什么也没做。

我今天早上又试了一次,按钮按下并且第一次发送这篇文章,然后按钮不再这样做 - 即使在页面重新加载时也是如此。

【问题讨论】:

  • 你的函数 refreshAllTabsWithFade() 中有什么?
  • @VivekSrivastava 我真的不明白这有什么关系,因为该功能工作正常,因为它在其他地方使用。
  • 我要求提供该功能,因为可能会由于该功能而引发一些 JavaScript 错误,因此您的按钮始终处于禁用状态。您能否确认页面上没有 JavaScript 错误?
  • @VivekSrivastava 没有 javascript 错误。

标签: javascript php ajax sqlite


【解决方案1】:

我能够让它与以下内容一起工作:

javascript:

$('.markComplete').submit( function( event ) {
            event.preventDefault();
            event.stopImmediatePropagation();
            $.ajax({ // create an AJAX call...
                data: $(this).serialize(), // serialize the form
                type: "POST", // GET or POST from the form
                url: "pages/ajax/repairlogMarks.php", // the file to call from the form
                success: function(response) { // on success..
                    refreshAllTabs();
                }
            });
            return false;
        });

按钮:

                                 <form class="markComplete">

                                        <input type="text" style="display:none;" class="form-control" name="uniqueid" value='<?=$row['uniqueID'];?>'>
                                        <input type="text" style="display:none;" class="form-control" name="markcomp" value='1'>
                                        <button type="submit" class="btn btn-success">
                                            <i class="btn-fa fa-only fa fa-check"></i>
                                        </button>

                                </form>

基本上,我将按钮做成了我知道如何为其创建 ajax 请求的表单。

-- 更新以使其适用于对不同唯一 ID 执行相同功能的多个按钮。

【讨论】:

    【解决方案2】:

    因为您使用“POST”发送 ajax 调用,所以在我看来 if(isSet($_GET['complete'])) 将评估为假。此外,如果您的按钮是使用 php 动态生成的,则将您的点击处理程序更改为以下内容:

    $('document').on('click', '#markComplete', function (){
         // Your code here
     })
    

    【讨论】:

    • 我在线程中的 GET 是我以前的做法,基本上它只是一个看起来像一个按钮的链接,可以在 URL 中放置一个 GETTER。问题是我不希望页面每次都重新加载。您的点击处理程序对我不起作用,该按钮是半动态生成的,因为它是为每个表条目创建的,其中包含一个 uniqueid。
    • 为了防止刷新在您的按钮单击处理程序中添加 event.preventDefault()。此外,该处理程序应该工作。您是否尝试过控制台记录某些内容以查看它是否触发?
    【解决方案3】:

    如果您有多个“标记完成”按钮;您需要使用类而不是 ID 来绑定事件。

    <button id="test">
      Test 1
    </button>
    <button id="test">
      Test 2
    </button>
    <script>
    $('#test').click(function (e) {
      console.log('test', e.target);
    });
    </script>
    

    在本例中,只有第一个按钮有效。当你指定一个 ID 时,jQuery 只会返回第一个元素。

    如果你使用类来绑定事件;两个按钮都可以工作:

    <button class="test">
      Test 1
    </button>
    <button class="test">
      Test 2
    </button>
    <script>
    $('.test').click(function (e) {
      console.log('test', e.target);
    });
    </script>
    

    【讨论】:

      【解决方案4】:

      我认为您的 javascript 在这一行有错误...

      var input = input = $(this).text()
      

      尝试用这个替换..

      var input = $(this).text();
      

      【讨论】:

      • 它似乎在做同样的事情。我在萤火虫中有一个东西显示它发布了数据,但现在该按钮没有做任何事情。附上一张图片。
      猜你喜欢
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      相关资源
      最近更新 更多