2015-04-16 2 views
1

Теперь это кажется немного сложным, и, возможно, у меня есть больше, чем я могу управлять, но, похоже, единственный способ добиться того, что мне нужно.Печать JSON (от php) до ajax до загрузочного модала

Я полный новичок, и я собираюсь сделать это вслепую для проекта, над которым я работаю (это самая сложная вещь во всем проекте), поэтому любая помощь будет высоко оценена!

У меня в основном есть загрузочная веб-страница, на этой веб-странице отображается список пользователей (из php в цикле while). То, что мне нужно, чтобы пользователь мог это сделать, - выбрать пользователя из этого и отредактировать детали в форме в модуле bootstrap.

До сих пор у меня все работает, модальная загрузка и т. Д. И из разных источников в Интернете препирались JSon, но я никогда не узнал об этом и не вышел из глубины. В настоящее время он печатает '[object HTMLCollection]' в каждом поле.

Во-первых, здесь есть HTML для модального & списка:

Modal (Это подходит идеально)

<div class="modal fade" id="editUserModal" tabindex="-1" role="dialog" aria-labelledby="editModalLabel" aria-hidden="true"> 
     <div class="modal-dialog"> 
     <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> 
      <h2 class="modal-title" id="editModalLabel"></h2> 
      </div> 
      <div class="modal-body"> 
      <form> 
       <div class="form-group"> 
        <label for="username" class="control-label">Username:</label> 
        <input type="text" name="username" class="form-control" id="username"></input> 
       </div> 
       <div class="row"> 
       <div class="col-lg-12"> 
        <div class="form-group"> 
         <label for="password" class="control-label">Password:</label> 
          <div class="input-group"> 
           <span class="input-group-btn"> 
           <input type="button" class="form-control" value="Change Password" onClick="changeRandomPassword();">&nbsp; 
           </span> 
           <input type="text" name="password" class="form-control" id="password" value="" required></input> 
          </div> 
        </div> 
       </div> 
      </div> 
       <div class="form-group"> 
        <label for="firstName" class="control-label">First Name:</label> 
        <input type="text" name="firstName" class="form-control" id="firstName"> 
       </div> 
       <div class="form-group"> 
        <label for="lastName" class="control-label">Surname:</label> 
        <input type="text" name="lastName" class="form-control" id="lastName"> 
       </div> 
       <div class="form-group"> 
        <label for="jobTitle" class="control-label">Job Title:</label> 
        <input type="text" name="jobTitle" class="form-control" id="jobTitle"> 
       </div> 
       <div class="form-group"> 
        <label for="TaskTeam" class="control-label">Task Team:</label> 
        <input type="text" name="TaskTeam" class="form-control" id="TaskTeam"> 
       </div> 
      </form> 
      </div> 
      <div class="modal-footer"> 
      <button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button> 
      <button type="button" class="btn btn-success">Submit Changes</button> 
      </div> 
     </div> 
     </div> 
    </div> 

Вот список PHP: (опять же никаких проблем здесь)

<?php 
include("dbconnect.php"); 

$dbQuery= mysql_query("SELECT * FROM users ORDER BY lastName ASC;"); 

while($dbRow = mysql_fetch_array($dbQuery)) 
{ 
$userID = $dbRow['id']; 
$username = $dbRow['username']; 
$firstName = $dbRow['firstName']; 
$lastName = $dbRow['lastName']; 
$jobTitle = $dbRow['jobTitle']; 
$userteam = $dbRow['TaskTeam']; 
$admin = $dbRow['admin']; 

echo '<tr>'; 
echo '<td>'; 
echo '<button type="button" class="btn btn-primary close" data-toggle="modal" data-target="#editUserModal" value='.$userID.' id="user" name="user"" data-user='.$userID.'><span title="Edit" aria-hidden="true" class="glyphicon glyphicon-edit"></span></button>'; 
echo '</td>'; 
echo '<td>'.$firstName.'</td>'; 
echo '<td>'.$lastName.'</td>'; 
echo '<td>'.$jobTitle.'</td>'; 
echo '<td>'.$userteam.'</td>'; 
echo '<td>'.$admin.'</td>'; 

echo '<td>'; 
echo '<a href="deleteUser.php?id='.$userID.'">'; 
echo '<button type="button" name="delete_row" id="delete_row" class="close">'; 
echo '<span title="Delete" aria-hidden="true" class="glyphicon glyphicon-trash">'; 
echo '</span>'; 
echo '<span class="sr-only">'; 
echo 'Delete'; 
echo '</span>'; 
echo '</button>'; 
echo '</a>'; 
echo '</td>'; 

echo '</tr>'; 
} 

echo mysql_error(); 
mysql_close(); 

?> 

Вот где должна быть проблема:

<script> 
    $('#editUserModal').on('show.bs.modal', function (event) 
    { 
     var button = $(event.relatedTarget) 
     var recipient = button.data('user') 
     var modal = $(this) 
     modal.find('.modal-title').text('Edit ' + recipient + "'s details.") 
     $(function() 
      { 
      $.ajax(
      { 
       type: 'GET', 
       url: "getUser.php?id=",    
       data: 'recipient', 
       dataType: "json", 
       success: function(data) 
       { 
        var obj = JSON.parse(data); 
        $.each(obj, function(key, val) 
        { 
         console.log(val);   
         var id = data[0];    
         var firstName = data[1];  
         var lastName = data[2]; 
         var username = data[3]; 
         var password = data[4]; 
         var jobTitle = data[5]; 
         var TaskTeam = data[6]; 
         var admin = data[12];  
        }); 
       } 
      }) 
     }) 
     modal.find('.modal-body #firstName').val(firstName) 
     modal.find('.modal-body #lastName').val(lastName) 
     modal.find('.modal-body #username').val(username) 
     modal.find('.modal-body #password').val(password) 
     modal.find('.modal-body #jobTitle').val(jobTitle) 
     modal.find('.modal-body #TaskTeam').val(TaskTeam) 
    }) 
</script> 

Наконец здесь PHP-файл, чтобы получить сведения о пользователе: (Это тоже работает, но только это делается с ручным Это большая часть его исключая пароли и т.д.)

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$userid = intval($_GET['id']); 
$sql="SELECT * FROM users WHERE id = $userid"; 
$result = $conn->query($sql); 

/* 
$user = array(); 
while ($row = mysql_fetch_array($result)) { 
    $details = array(
    "username"   => $row['username'], 
    "firstName"   => $row['firstName'], 
    "lastName"   => $row['lastName'], 
    "taskTeam"   => $row['taskTeam'] 
); 
    $user[] = $details; 
} 
echo json_encode($user); 
$conn->close(); 
*/ 

if ($result->num_rows > 0) { 
    // output data of each row 
    $array = array(); 
    while($row = $result->fetch_assoc()) { 
     array_push($array, $row); 
    } 
    echo json_encode($array); 
} else { 
    echo "0 results"; 
} 
$conn->close(); 

Извините за отсутствия Mysqli я знаю, что это последний стандарт и в настоящее время реализую его в этом проекте.

Любая помощь будет замечательной! Благодаря

+0

Попробуйте проверить вкладку сети в ваши инструменты разработчика, чтобы увидеть тело ответа и опубликовать его также –

+0

@ ste-fu в настоящее время работает с Notepad ++ и проверяет изменения через FTP и проверяет в браузере изменения. Не знаете, как получить тело ответа ... – JoshM

ответ

1

Проблема с кодом здесь:

var obj = JSON.parse(data); 
$.each(obj, function(key, val) 
{ 
    console.log(val);   
    var id = data[0];    
    var firstName = data[1];  
    var lastName = data[2]; 
    var username = data[3]; 
    var password = data[4]; 
    var jobTitle = data[5]; 
    var TaskTeam = data[6]; 
    var admin = data[12];  
}); 

Вы уже сказали, ваш вызов AJAX, что вы ожидаете JSON назад от вашего PHP скрипта. Вы сделали это с dataType: "json". Поэтому нет причин делать это здесь: var obj = JSON.parse(data);. Поскольку вы сказали свой AJAX-вызов, что собираетесь получать JSON, он автоматически анализирует его для вас, когда PHP-скрипт завершается.

Для доступа к данным просто используйте синтаксис ..Например, data.firstName

Кроме того, вам может понадобиться нужно изменить эту строку в файл PHP из

echo json_encode($array); 

в

header('Content-Type: application/json'); 
echo json_encode($array); 

Кроме того, ваш PHP скрипт требуется некоторая очистка :

<?php 
include("dbconnect.php"); 

$dbQuery = mysql_query("SELECT * FROM users ORDER BY lastName ASC;"); 

while ($dbRow = mysql_fetch_array($dbQuery)) { 

    $userID = $dbRow['id']; 
    $username = $dbRow['username']; 
    $firstName = $dbRow['firstName']; 
    $lastName = $dbRow['lastName']; 
    $jobTitle = $dbRow['jobTitle']; 
    $userteam = $dbRow['TaskTeam']; 
    $admin  = $dbRow['admin']; 

    echo ' 
    <tr> 
     <td> 
      <button type="button" class="btn btn-primary close" data-toggle="modal" data-target="#editUserModal" value='.$userID.' id="user" name="user"" data-user='.$userID.'><span title="Edit" aria-hidden="true" class="glyphicon glyphicon-edit"></span></button> 
     </td> 
     <td>'.$firstName.'</td> 
     <td>'.$lastName.'</td> 
     <td>'.$jobTitle.'</td> 
     <td>'.$userteam.'</td> 
     <td>'.$admin.'</td> 
     <td> 
      <a href="deleteUser.php?id='.$userID.'"> 
       <button type="button" name="delete_row" id="delete_row" class="close"> 
        <span title="Delete" aria-hidden="true" class="glyphicon glyphicon-trash"></span> 
        <span class="sr-only">Delete</span> 
       </button> 
      </a> 
     </td> 
    </tr>'; 
} 

echo mysql_error(); 
mysql_close(); 
?> 
+0

ДА! OMG IT WORKED! Вы не представляете, насколько я благодарен. Застрял на этом почти месяц и не получил помощи от моих профессоров! Как я могу отплатить вам! У меня даже нет ответа15, чтобы ответить на ответ, только на 13. damnit! Вы в твиттере и т. Д.? haha еще раз спасибо – JoshM

+0

Удивительно, я рад, что это сработало для вас. Нет, нет учетной записи Twitter, просто stackoverflow. Дай мне знать, смогу ли я помочь чему-нибудь еще. Бог благословил! – three3

+0

Серьезно спасибо, любая идея, как работать с флажком здесь? Итак, если возвращается значение, он проверяет флажок в модальном? Я не хочу слишком много – JoshM

Смежные вопросы