2014-04-22 146 views
0

僅供參考,我使用的是mySQL數據庫。這必須在沒有頁面刷新的情況下完成(所以需要使用AJAX [我爲我的AJAX功能使用jQuery])。舉例來說,有一個人有一個名字,姓氏,他們被分配到最少一個工作或最多2個工作。有兩個表格:如何在不刷新頁面的情況下顯示名稱值而不是刷新頁面(使用jQuery)

第一個表格從作業表中獲取id並將其用作外鍵。

表 「tbl_person」:

+------+-------------+------------+--------+--------+ 
| p_ID | p_firstName | p_lastName | p_job1 | p_job2 | 
+------+-------------+------------+--------+--------+ 
| 1 | Mike  | Jefferson |  3 |  1 | 
| 2 | Jack  | Frost  |  2 |  | 
+------+-------------+------------+--------+--------+ 

表 「tbl_job」

+--------+------------+ 
| job_ID | job_Name | 
+--------+------------+ 
|  1 | Clerk  | 
|  2 | Programmer | 
|  3 | Mechanic | 
+--------+------------+ 

我想從tbl_job表JOB_NAME顯示tbl_person表。截至目前,php代碼本身正確顯示了頁面刷新。然而,用我目前的jQuery代碼,只顯示來自tbl_person的數據。

例的什麼jQuery的當前顯示(顯示器使用一個例如所有條目):我想要什麼jQuery代碼做(使用一個所有條目顯示

+------+-----------+---+---+----+------+ 
| Mike | Jefferson | 3 | 1 |Edit|Delete| 
+------+-----------+---+---+----+------+ 

的PHP代碼所做的例子/例如):

+------+-----------+----------+-------+----+------+ 
| Mike | Jefferson | Mechanic | Clerk |Edit|Delete| 
+------+-----------+----------+-------+----+------+ 

代碼的主要部分如下。我想顯示,使其顯示在網頁上我所記錄到的HTML表控制檯(見上表):

$.ajax({ 
    url: "person.php", 
    type: 'POST', 
    data: data, 
    success: function (data) { 
     console.log($("#job1 option:selected").text()); 
     console.log($("#job2 option:selected").text()); 
    }, 
    error: function() { 
     //insert error alert 
    } 
}); 

功能PDO文件不包括(包含DB函數)

與輸入數據和顯示格式(HTML結構)

PHP文件: person.php

//below code posts new info to database 
<?php 
$pdo = new functions(); 
$getPerson = $pdo->getPerson(""); 
$PersonList = $pdo->getPersonList(); 

if(isset($_POST["p_ID"])){ 
    if($_POST["p_ID"] != ''){ 
     $pdo->updatePerson($_POST); 
    }else{ 
     $pdo->addPerson($_POST); 
    } 
exit(); 
} 

if(isset($_GET["id"])) { 
    $pdo->deletePerson($_GET["id"]); 
} 
?> 

//html form for entering info (this should pop up with jQuery code when clicking new entry button 

<div id="personform" title="Person Form"> 
<form name="personedit" id="personedit" method="post" action="person.php"> 
<!--//hidden section for the id to pass for the record update--> 
<input name="p_ID" type="hidden" value="" /> 
<fieldset> 
<legend>People</legend> 
<table> 
    <tr> 
     <th><label for="p_firstName">First Name:</label><br /></th> 
     <td><input type="text" class="name" name="p_firstName" value="" size="18" maxlength="25"/></td> 
     <th><label for="p_lastName">Last Name:</label><br /></th> 
     <td><input type="text" class="name" name="p_lastName" value="" size="18" maxlength="25"/></td> 
    </tr> 
    <tr> 
     <th>First Job:</th> 
     <td> 
      <select name="p_job1" id="job1" class="name"> 
       <option value=""></option> 
       <?php 
        $getJobs = $pdo->getJobs(); 
        foreach($getJobs as $row){ 
         if($row["job_ID"] == $getPerson["p_job1"]){ 
          $selected = "selected = selected"; 
         }else{ 
          $selected = ""; 
         } 
         echo "<option value='" . $row['job_ID'] . "' $selected>" . $row['job_name'] . "</option>"; 
        } 
       ?>     
      </select> 
     </td> 
     <th>Second Job:</th> 
     <td> 
      <select name="p_job2" id="job2" class="name"> 
       <option value=""></option> 
       <?php 
        foreach($getJobs as $row){ 
         if($row["job_ID"] == $getPerson["p_job2"]){ 
          $selected = "selected = selected"; 
         }else{ 
          $selected = ""; 
         } 
         echo "<option value='" . $row['job_ID'] . "' $selected>" . $row['job_name'] . "</option>"; 
        } 
       ?>     
      </select>    
     </td> 
    </tr> 
</table>   
</fieldset>   
</form> 
</div> 

/*html code to display the person table data in table format with the job name 
displayed (not the id) */ 

<a class="add" href="person.php">New Entry</a> 

<h1>Person List</h1> 
<div class="float-left"> 
    <table id="tbllist"> 
     <tr> 
      <th>Last Name</th> 
      <th>First Name</th> 
      <th>First Job</th> 
      <th>Second Job</th> 
      <th colspan="2">Action</th> 
     </tr> 
    <?php 
     foreach ($PersonList as $row) { 
      echo "<tr class='fadeaway" . $row['p_ID'] . "'>";  
      echo "<td><input type='hidden' id='p_lastName".$row['p_ID']."' value='".$row['p_lastName']."'>".$row['p_lastName']."</td>"; 
      echo "<td><input type='hidden' id='p_firstName".$row['p_ID']."' value='".$row['p_firstName']."'>".$row['p_firstName']."</td>"; 
      echo "<td><input type='hidden' id='job_Name1".$row['p_ID']."' value='".$row['p_job1']."'>".$row['job_Name1']."</td>"; 
      echo "<td><input type='hidden' id='job_Name2".$row['p_ID']."' value='".$row['p_job2']."'>".$row['job_Name2']."</td>"; 
      echo "<td><a href='#' class='edit' id='".$row['p_ID']."'>Edit</a></td>"; 
      echo "<td><a href='#' class='delete' id='".$row['p_ID']."'>Delete</a></td>"; 
      echo "</tr>"; 
     } 
    ?> 
    </table> 
</div> 

的Javascript代碼部分

//this section is in a separate js file 
// JavaScript Document 
function() { 
    var data = $($(this).data('formID')).closest("form").serialize(); 

    if($($(this).data('formID')).valid()){ 
     var ID = $(this).data('ID'); //gets ID of table row for editing 

     //This function finds the class name of each input for use in the add section 
     var inputname = $(".name").map(function() { 
      r = $(this).attr("name"); 
      return r; 
     }).get(); 

     //This function finds the value of each input for use in the add section 
     var inputval = $(".name").map(function() { 
      p = $(this).val(); 
      return p; 
     }).get(); 

     //code to change array positioning so that the table is printed correctly. 


     /*AJAX code for name value (this is what needs to be changed) */ 
     $.ajax({ 
      url: "person.php", 
      type: 'POST', 
      data: data, 
      success: function (data) { 

      }, 
      error: function() { 
       alert('Sorry, there was a problem!'); 
      } 
     }); 

     $.ajax({ 
      'url': '', 
      'type': 'POST', 
      'dataType': 'text', 
      'data': data, 
      'success': function(data){ 

       if (action == "edit") { 

        var tblval = ""; 
        //loops through the number of input names and adds a table value for each one 
        for (i = 0; i < inputname.length; i++) { 
         console.log(inputval[i]); 
         var val = inputval[i]; 
         var tblval = tblval + "<td><input type='hidden' id="+inputname[i]+ID+" value='"+val+"'>"+val+"</td>"; 
        } 
        edit = $("#tbllist .fadeaway"+ID+"").html(tblval+"<td><a href='#' class='edit' id='"+ID+"'>Edit</a></td>"+"<td><a href='#' class='delete' id='"+ID+"'>Delete</a></td>"); 
       } 

      } 
     }); 
    } 
} 

我對AJAX和jQuery相當陌生,所以這些代碼中的一些可能不是最佳實踐。

+2

這是文本的一個巨大的牆,你能凝聚一點嗎? – Halcyon

+1

如果你已經知道你需要什麼,你不需要頁面刷新或任何額外的請求。儘管在你的初始查詢中需要'加入'作業表 – fejese

+0

只能假設,但是如果你的AJAX加載的腳本調用'$ pdo-> getPerson($ p_ID)',你應該在其查詢中加入'JOIN'與'$ pdo-> getPersonList()'相同。 – Lukas

回答

0

沒有與我寫的代碼等問題,但我已經改變這一部分解決了這個特殊的問題:

var inputval = $(".name").map(function() { 
    p = $(this).val(); 
    return p; 
}).get(); 

這樣:

var inputval = $(".name").map(function() { 
    if (!$(this).is("select")) {  
     p = $(this).val(); 
    } else { 
     p = $(this).find("option:selected").text(); 
    } 
    return p; 
}).get(); 
相關問題