【问题标题】:Issues with using JSON to fetch data from a PHP database使用 JSON 从 PHP 数据库中获取数据的问题
【发布时间】:2020-06-17 01:02:02
【问题描述】:

我正在将此产品保修数据库系统作为一个小型学习项目作为新的 Web 开发。我对我最想拥有的最后一个更大的工具之一有很多问题。这是每一行中的一个按钮,当单击该按钮时,将弹出一个模式弹出窗口,并有一个将原始评论设置为值的文本框。当用户完成添加或更改评论后,单击另一个按钮,它将更新(我对此部分有信心)。

这个问题在于检索实际评论。我正在使用在网上找到的类似项目作为指导工具。他们使用 JSON 调用 php 函数来检索数据并将文本框的值设置为数据。我尝试了这种方法,但似乎没有任何效果。我尝试更改代码,阅读更多关于 JSON 的内容,尝试过其他项目,但没有成功。我还尝试使用 onclick 方法并在实际按钮侧传递参数,但这也不起作用。当我的意思是它不起作用时,我的意思是控制台日志中有 0 个错误,所以我不确定在哪里寻找更正。

在删除数据类型:'JSON' 时,我确实让该函数正常工作,但该框从未设置为该值。

这里有几个代码块供参考。是的,它很混乱,是的,我知道它容易受到连接攻击。

在表格 php 文件中,用于为每个产品创建按钮。

if ($row['WarrStatus'] == 'ACTIVE') {
    echo '<td><button type="button" class="deleteRow" id="'.$id.'" >Delete</button></td>
          <td><button type="button" class="updateRow" id="'.$id.'" >Update</button></td>
          <td><button type="button" class="resolveRow" id="'.$id.'" >Resolve</button></td>';
}

这是点击updateRow按钮时的js函数,这个会执行

$(".updateRow").click(function() {
    var item_id = $(this).attr("id");  

    $.ajax({  
            url:"Actions/fetch.php",  
            method:"POST",  
            data:{item_id:item_id},  
            dataType:"json",  

            success: function(data) {   
                document.getElementById("CommentBox") = data.comments //Comments = the data retrieved
                 modal.style.display = "block"; //Display the modal 
            }  
       });  
  });

这是获取json数据的fetch.php。

if(isset($_POST["item_id"])) {  
      $query = "SELECT comment FROM inspection.product WHERE TransactionID = '".$_POST["item_id"]."'";  
      $result = mysqli_query($conn, $query);  
      $row = mysqli_fetch_array($result);  
      echo json_encode($row); 
 }  
 ?>

最后,这是模态的。

<div id="myModal" class="modal" 
    <div class="modal-content" 
    <span class="close">&times;</span>
    <h2>Update a Comment</h2>
    <p id="CustDetails">You are now editing ...</p>
    <form method="POST">
        <input type ="text" class="CommentBox" id="CommentBox" value=""></input>
        <button class="updateCommentbtn" id="updateCommentbtn" value="">Update</button>
    </form>
    </div>
</div>

这是显示的内容

总而言之,我的问题似乎是当单击更新按钮时,没有通过 JSON 或任何其他方法检索到数据,我不确定这是为什么。任何帮助将不胜感激!

【问题讨论】:

  • echo json_encode($results);,但你从来没有给$results分配任何东西。也许你的意思是echo json_encode($row);
  • 啊!我的错。这并不能解决它只是尝试一些东西,要更改和编辑它。谢谢!
  • 您应该在 AJAX 调用中添加错误回调。如果请求返回 200 以外的响应,您将不会看到任何错误,并且不会执行您的成功回调。
  • @akenion 谢谢,我添加了一个带有警报的失败。但有趣的是,当我单击更新按钮时,没有失败警报...
  • 查看浏览器开发者工具中的网络标签。您应该会看到对您的 AJAX 请求的响应。如果您的错误回调没有触发,它可能是 200。由于不会使用 JSON 请求设置 POST 参数,我希望响应正文为空。

标签: javascript php html jquery json


【解决方案1】:

您的问题来自 Javascript 成功函数的这一行

document.getElementById("CommentBox") = data.comments

将其更改为:

document.getElementById("CommentBox").value  = data.comments

【讨论】:

  • 这只是问题的一部分,但这比我的回答中的 (2) 更正确,因为 CommentBox 是一个输入。我以为它只是一个像跨度这样的元素。
【解决方案2】:

这里至少有几个问题。

  1. PHP 不会将 JSON 隐式解析为 POST 超级全局。这仅适用于表单数据(您可以更改 AJAX 请求以传递表单数据或更新您的 PHP 以解析 JSON)。这意味着您的 isset($_POST["item_id"]) 检查将始终返回 false。
  2. 在 AJAX 请求的成功处理程序中,您将字符串值分配给 DOM 元素。这可能不是您想要的。您可能想要设置元素的innerHtml。由于您正在(可能)处理文本并且已经在使用 jQuery,所以只需执行$("#CommentBox").text(data.comments);

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2011-11-16
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多