【问题标题】:How to send an ID through AJAX to a PHP file and display the result in a Bootstrap Modal如何通过 AJAX 将 ID 发送到 PHP 文件并在 Bootstrap 模式中显示结果
【发布时间】:2015-10-19 19:53:06
【问题描述】:

我有一个表格,其中的行根据数据库记录动态显示。

我想要做的是,当我单击其中一行时,它会加载 Bootstrap 模式,其中包含该特定记录的数据库中的所有信息。

这是显示的每一行的代码,当我单击它时,它会显示模态,但模态是空的,没有任何数据。

初始文件

<tr class="issuesTable push" data-toggle="modal" data-target="#myModal" <?php echo "id='" . $row['Issue_ID'] . "'"; ?> >

所以我试图获取这个动态 ID 值并将其传递给一个名为 issueDisplayModal.php 的文件以进行查询,然后在模式上显示详细信息。这是另一个文件中的查询。

应接收 ID 的代码

$issueID = $_POST['record_id']
issueQue ="SELECT * FROM Issues WHERE Issue_ID = $issueID";
$result = $my_dbhandle->query($issueQue);
$numResults = $result->num_rows;

在这之后,我做了一系列的回声来打印出我正在工作的模态信息(谢天谢地!)。

这是我尝试发送 HTTP 请求以根据我发送的 ID 在模态框上显示 issueDisplayModal.php 代码的 JQuery 代码。

应该调用文件并发送 ID 变量的 AJAX

$('#myModal').on('show.bs.modal', function (e) {
   var $invoker = $(e.relatedTarget);
   var issue_id = $invoker.attr('id');

   $.ajax({
      type : 'post',
       url : 'issueDisplayModal.php', // in here you should put your query 
      data : 'post_id='+ issue_id, // here you pass your id via ajax .
                 // in php you should use $_POST['post_id'] to get this value 
   success : function(r)
       {
          // now you can show output in your modal 
         $('#mymodal').show();  // put your modal id 
         $('.something').show().html(r);
       }
   });

})

这是应该显示 issueDisplayModal.php

的结果的模式
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">Issue Details:</h4>
      </div>

      <div class="modal-body">

        <div class="something">

         **results should be displayed here**

        </div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Create Task</button>
        <button type="button" class="btn btn-primary">Close</button>
      </div>

    </div>
  </div>
</div>

【问题讨论】:

  • 那么当您单击该按钮时会发生什么?您能否澄清对您不起作用的位,缺少什么?任何错误信息?如果您发布有关 javascript 连接位置的更多详细信息也会有所帮助,例如一个完整的 HTML 测试页面会很好......
  • 模式出现了,但它是空的。我不知道是否没有调用 php 文件,或者它是否没有正确传递 ID。让我发布一段更大的代码。我只是不想被所有的代码压得喘不过气来。
  • 当您将其写入控制台时,r 中有任何内容吗?在调用 .show() 之前,执行 console.log(r) 以查看响应中是否有任何内容
  • 我认为 r 中没有任何内容。
  • @AbrahamA.如果你还没有弄清楚,问题出在&lt;tr&gt;,然后是var $invoker = $(e.relatedTarget);

标签: php jquery ajax twitter-bootstrap bootstrap-modal


【解决方案1】:

您的方法中有几个错误和不必要的代码

<tr class="issuesTable push" data-toggle="modal" data-target="#myModal" <?php echo "id='" . $row['Issue_ID'] . "'"; ?> >

&lt;?php echo "id='" . $row['Issue_ID'] . "'"; ?&gt; 更改为data-id="&lt;?php echo $row['Issue_ID'];?&gt;"

<tr class="issuesTable push" data-toggle="modal" data-target="#myModal" data-id="<?php echo $row['Issue_ID'];?>" >

那么在bootstrap modal events中你可以在一个变量中获取id,不需要定义2个变量

var $invoker = $(e.relatedTarget);
var issue_id = $invoker.attr('id');

你可以像这样得到id

var invoker = $(e.relatedTarget).data('id');

在路上,在 Ajax 方法中,success: function 完全错误,你不需要再次显示模态 $('#mymodal').show(); 也不需要再次显示 div something $('.something').show().html(r); 所以@987654334 @应该是

$.ajax({
   type: 'post',
   url: 'issueDisplayModal.php', // in here you should put your query 
   data: 'post_id=' + invoker, // change issue_id to invoker .
   // in php you should use $_POST['post_id'] to get this value 
   success: function (r) { //Change
       // now you can show output in your modal 
       //$('#mymodal').show(); // Don't need this
       $('.something').html(r); // Don't need .show() Here
   }
});

PHP

在 Ajax 中,数据是 post_id,但您获取的是 $_POST['record_id'],它应该是 $_POST['post_id'];

$issueID = $_POST['post_id'];
issueQue ="SELECT * FROM Issues WHERE Issue_ID = '$issueID'";
$result = $my_dbhandle->query($issueQue);
$numResults = $result->num_rows;

获取模态结果

echo $numResults;

旁注:确保脚本已准备好 DOM。

$(document).ready(function(){
   //Put your script Here
});

就是这样,它可以开箱即用。

编辑

最终脚本看起来像

$(document).ready(function(){
    $('#myModal').on('show.bs.modal', function (e) {
        var invoker = $(e.relatedTarget).data('id');
        alert(invoker);
        $.ajax({
           type: 'post',
           url: 'issueDisplayModal.php',
           data: 'post_id=' + invoker,
           success: function (r) {
               $('.something').html(r);
           }
        });
    });
});

【讨论】:

  • 哇!非常感谢您提供的令人难以置信的帮助!这是我对 AJAX 的第一次尝试,正如您所展示的,我没有正确地做到这一点。我将继续实施您的解决方案。再次非常感谢您!
  • 我对代码进行了更改,但我认为现在的问题是当模式打开时 Javascript 没有触发。所以基本上这行代码并没有像它应该的那样触发。 $('#myModal').on('show.bs.modal', 函数 (e){}
  • 设置alert(invoker);来查看id是否传递给modal也可以将show.bs.modal改为shown.bs.modal
  • 不,由于某种原因它没有触发。我添加了这两个警报,但都没有出现。警报(调用者); alert("加载的模态脚本");在您发表评论之前,我已经更改了 shown.bs.modal。 :(
  • 并且您在模态调用按钮data-id="&lt;?php echo $row['Issue_ID'];?&gt;"中进行了建议的更改@
【解决方案2】:

因为您选择了数据切换选项,所以您可能在 tr 元素上绑定了多个单击事件。

如果您没有收到成功响应,则模式弹出的唯一原因是这些属性。

如果您想在同一个点击事件上触发 ajax 调用,请使用内置模式事件

$('#myModal').on('show.bs.modal', function (e) {
    var $invoker = $(e.relatedTarget);
    var issue_id = $invoker.attr('id');
   // now do the $.ajax() call and test for a response
 })

这是此类事情的一个工作示例: http://www.bootply.com/WTgjFfxWSl#

【讨论】:

  • 您说的对不止一次点击的绑定。我删除了数据切换选项,它停止拉空模态。我会试试你的想法,看看效果如何。谢谢!
  • 您可以使用 data-toggle 属性,您只需要在调用 ajax 之前挂钩 show.bs.modal 事件。我将进一步更新示例,向您展示如何从调用者获取值
  • 好的。我尝试了你的第一个代码,遗憾的是它没有工作:(
  • 更新了示例。为了澄清,您仍然需要数据切换属性来触发模式。你不需要 $('push').click 虽然
  • 我很遗憾地说它没有用。我觉得我很接近它的工作。这只是一些小事。我在说明中更新了我的 AJAX 代码,以便您可以看到我将其更改为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2010-09-22
  • 2016-04-18
相关资源
最近更新 更多