使用AJAX

时间:2015-04-23 18:02:24

标签: javascript php twitter-bootstrap-3 bootstrap-modal

我有一个使用PHP循环在我的页面上回显的用户列表。当我单击每个用户的名称时,会弹出Bootsrap Modal并显示用户的更多详细信息。链接看起来像这样。

<a href="#user"  data-toggle="modal"  data-id="{$user['id']}">UserName</a>

如您所见,我将用户的ID传递给Bootstrap模式,以便我可以通过调用Bootstrap模式中的get_user_by_id()来使用它来检索用户的其他信息。

模态看起来像这样

<div class="modal fade" id="user">
    <div class="modal-header">
        <button class="close" data-dismiss="modal">×</button>
        <h3>Modal header</h3>
    </div>
    <div class="modal-body">
        <?php
          $user = get_user_by_id($id);
         ?>
        <input type="text" name="bookId" id="bookId" value=""/>
    </div>
</div>

JS代码就像这样

$('#user').on('show.bs.modal', function (event) {
   var button = $(event.relatedTarget)
   var id = button.data('id')
})

根据上面的JS代码,我在var id变量中有我的用户ID。 但是,我无法想象如何将上述PHP函数的值用作参数。

有没有可行的办法呢?

我已经编辑了一个关于AJAX方法更独特的问题,其中大多数答案都基于AJAX

PS:我是PHP和Bootstrap的新手。

4 个答案:

答案 0 :(得分:3)

您将需要使用ajax来运行PHP。由于@Tom声明javascript在DOM中加载后无法访问PHP。 PHP是一种服务器端语言,只能这样访问。

通过ajax连接到PHP之后,您可以使用返回的内容加载div。只有在加载内容之后,如果您打开模式,否则您将看到显示的框的外观,然后显示内容。

基本示例

$(".btn").click(function(){
    // AJAX code here.
    $.ajax(
    ....
    success: function($data){
      $('.target').html(data)
      $("#myModal").modal('show');
    }
    );
});

答案 1 :(得分:1)

以这种方式你想要解决这个问题是不可能的。因为要从PHP中获取服务器中的数据,您必须向服务器请求,最好的方法是提交表单。在这里,您希望以模态显示数据,因此您需要异步执行此操作。所以你可以尝试这样 -

    //keep a button to show the modal for user details
    <button class="detail" data-toggle="modal" data-target="#user_modal" data-id="<?= $user->id ?>">Detail</button>

    //and using jQuery on the click of the above button post a form to your desire url
        $(document).on("click", ".detail", function () {
            var id = $(this).data('id');
             $.ajax({
                    type: "POST",
                    url: "your/url",
                    data: { id: id},
                    success: function(data) {
   //and from data you can retrive your user details and show them in the modal

                    }});
                 });

答案 2 :(得分:0)

Bootstrap模式允许你加载一个远程页面,这就是你要找的东西我相信......

<a href="userdata.php?uid=<?php echo $user['id']?>" data-target="#user" data-toggle="modal"  data-id="{$user['id']}">UserName</a>

然后模态变为:

<div class="modal fade" id="user" tabindex="-1" role="dialog" aria-labelledby="user" aria-hidden="true"><div class="modal-dialog modal-lg"><div class="modal-content"></div></div></div>

和userdata.php

<?php
$user_id = $_GET['uid'];
$user = get_user_by_id( $user_id );
?>

<div class="modal-header">
    HEADER STUFF GOES HERE
</div>

<div class="modal-body">
    USER INFO GOES HERE
</div>

<div class="modal-footer">
    MODAL FOOTER HERE
</div>

答案 3 :(得分:-1)

Bootstrap模式有一个选项远程,但在Bootstrap v3.3.0上已弃用,将在v4中删除。您可以使用jQuery.load。 例如

$( "#some-click" ).on('click', function() {
    var userId = button.data('id'); //get user id here
    //jQuery.load set html with modal and user details by id  
    $( "#user" ).load( "/not-here.php", { id:userId });
});