2017-08-12 23 views
0

我寫了這個代碼:如何將數據添加到一個模式PHP,MySQL的阿賈克斯

<div class="container"> 
<div class="row"> 
    <div class="col-md-3"> 
     <div id="accordion" role="tablist" aria-multiselectable="true"> 
      <div class="card"> 
       <div class="card-header" role="tab" id="headingOne"> 
        <h5 class="mb-0"> 
         Message options 
        </h5> 
       </div> 

       <div id="collapseOne" class="collapse show" role="tabpanel" aria-labelledby="headingOne"> 
        <div class="card-block"> 
         <table class="table"> 
          <tr> 
           <td> 
            <a href="?messages=inbox"><i class="fa fa-inbox"></i> Inbox</a> 
           </td> 
          </tr> 
          <tr> 
           <td> 
            <a href="?messages=read"><i class="fa fa-envelope"></i> Read</a> 
           </td> 
          </tr> 
          <tr> 
           <td> 
            <a href="?messages=trash"><i class="fa fa-trash"></i> Trash</a> 
           </td> 
          </tr> 
         </table> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
    <div class="col-md-9"> 
     <div class="card"> 
      <div class="card-header"> 
       Messages 
      </div> 
      <div class="card-block"> 
       <table class="table mx-auto" id="table"> 
        <thead> 
        <tr> 
         <th>Number</th> 
         <th>Subject</th> 
         <th>Time added</th> 
         <th>More</th> 
        </tr> 
        </thead> 
      </div> 
      <?php 

      if((isset($_GET['messages']) && $_GET['messages'] == 'inbox') || !isset($_GET['messages'])) { 
       $id = $_SESSION['id']; 
       $messages = $database->getDataAsArray("SELECT * FROM messages WHERE userId = $id AND messageDeleted = 0"); 
      } 
      elseif(isset($_GET['messages']) && $_GET['messages'] == 'read'){ 
       $id = $_SESSION['id']; 
       $messages = $database->getDataAsArray("SELECT * FROM messages WHERE userId = $id AND messageRead = 1"); 
      } 
      elseif (isset($_GET['messages']) && $_GET['messages'] == 'trash'){ 
       $id = $_SESSION['id']; 
       $messages = $database->getDataAsArray("SELECT * FROM messages WHERE userId = $id AND messageDeleted = 1"); 
      } 
      if(!$messages){ 
       echo '<tr> 

           <td colspan="3" style="text-align: center">No new messages in the inbox</td> 

          </tr>'; 
      } 
      elseif(!isset($_GET['messages']) || $_GET['messages'] == 'inbox'){ 
       foreach ($messages as $message){ 
        $number = $message['id']; 
        $subject = $message['subject']; 
        $time_added = $message['time_added']; 
        if($message['messageRead'] == 0){ 
         echo "<tr class='table-active'><td>$number</td><td>$subject</td><td>$time_added</td></tr>"; 
        } 
        else{ 
         echo "<tr><td>$number</td><td>$subject</td><td>$time_added</td><td><div class='dropdown'> 
            <button class='btn btn-secondary btn-sm ' type='button' id='dropdownMenu2' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'> 
             <i class='fa fa-ellipsis-v'></i> 
            </button> 
            <div class='dropdown-menu dropdown-menu-left' aria-labelledby='dropdownMenu2'> 
            <a class='dropdown-item' href='#'>Preview</a> 
            <a class='dropdown-item' href='#'>Mark as read</a> 
            <a class='dropdown-item' href='#'>Mark as unread</a> 
            </div> 
           </div> 
          </td></tr>"; 
        } 
       } 
      } 
      else{ 
       foreach ($messages as $message){ 
        $number = $message['id']; 
        $subject = $message['subject']; // needs to become subject new row in database 
        $time_added = $message['time_added']; 
        echo "<tr><td>$number</td><td>$subject</td><td>$time_added</td> 

          <td><div class='dropdown'> 
            <button class='btn btn-secondary btn-sm ' type='button' id='dropdownMenu2' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'> 
             <i class='fa fa-ellipsis-v'></i> 
            </button> 
            <div class='dropdown-menu dropdown-menu-left' aria-labelledby='dropdownMenu2'> 

            <button class='dropdown-item' data-toggle='modal' data-number='$number' data-target='#exampleModalLong'>Preview</button> 
            <a class='dropdown-item' href='#'>Mark as read</a> 
            <a class='dropdown-item' href='#'>Mark as unread</a> 
            </div> 
           </div> 
          </td></tr>"; 
       } 
      } 
      ?> 
     </div> 
    </div> 
</div> 

<!-- Modal --> 
<div class="modal fade" id="exampleModalLong" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true"> 
    <div class="modal-dialog" role="document"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5> 
       <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
        <span aria-hidden="true">&times;</span> 
       </button> 
      </div> 
      <div class="modal-body"> 
       ... 
      </div> 
      <div class="modal-footer"> 
       <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> 
       <button type="button" class="btn btn-primary">Save changes</button> 
      </div> 
     </div> 
    </div> 
</div> 
<script> 
    $('#exampleModalLong').on('show.bs.modal', function(e) { 
     var number = $(e.relatedTarget).data('number'); 
     $.ajax({ 
      type: 'POST', 
      url: 'retrieveData.php', 
      data: { 
       'id': number 
      }, 
      success: function(data){ 
       console.log(data); 
      }, 
      error: function(error){ 
       alert(error); 
      } 
     }); 
    }); 
</script> 

我想通過郵件的標識來檢索數據並顯示在模態的點擊預覽。但不知何故,當我點擊我的3點菜單上的(其啓動模式)控制檯將不會從retrieveData.php日誌中的數據

retrieveData.php

if(isset($_POST['id'])){ 
    $id = $_POST['id']; 
    $data = $database->getDataAsArray("SELECT * FROM messages WHERE id=$id"); 
    echo $data; 
    return $data; 
} 

getDataAsArray功能(完全地不安全的,我知道我需要用準備好的statment):

public function getDataAsArray($myQuery){ 
    $this->connection = mysqli_connect($this->host, $this->dbUsername, $this->dbPassword, 'portal'); 
    $query = mysqli_query($this->connection, $myQuery); 
    $results = array(); 
    while($line = mysqli_fetch_array($query)){ 
     $results[] = $line; 
    } 
    return $results; 
} 

任何人都可以請幫我解決我的Ajax功能(我認爲錯誤是存在的),所以我可以在我的模式顯示消息的數據?

+0

使用您的瀏覽器的調試工具。開發控制檯中是否有錯誤? JavaScript代碼是否被執行?是否發起AJAX呼叫?它是否包含您期望的數據?服務器的迴應是什麼? – David

+0

@David控制檯沒有錯誤,沒有服務器響應。 Ajax被調用,Javascript也是如此。 –

+0

打開PHP中的錯誤報告。檢查PHP錯誤日誌。如果通過「無響應」,你的意思是響應完全是空白的,那麼這可能是PHP的「死亡白屏」,這意味着服務器端發生錯誤。如果「無響應」表示請求只是無限期掛起,那麼聽起來好像服務器端代碼中可能存在邏輯錯誤,可能導致無限循環,並且您需要進行一些調試才能找到它。 – David

回答

1

echo $data;其中$data是一個數組將輸出僅由the manual描述文本「陣列」:

數組將被轉換成字符串「陣列」;因此, 回顯和打印不能自己顯示數組的內容。

使用json_encode到數組JSON(JavaScript對象符號)格式:

echo json_encode($data); 

順便說一句,你可以擺脫return $data;的,因爲它沒有做任何事情(假設給定的代碼ISN不在函數內,並且該文件不包含在代碼的其他任何地方,使用includerequire)。