2014-04-22 144 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(); 
相关问题