在php中通过Ajax加载当前页面

时间:2013-09-09 20:26:39

标签: php ajax

我的ajax脚本有问题,我需要加载页面而不刷新页面。基于此代码。

的index.php

<div class="header-page" class="clearfix" role="banner">
        <div class="container">
            <img src="images/logo.png" />
        </div>             
    </div>
    <!-- end of HEADER -->
    <form>
    <div id="contents">
    <div class="main-container">
        <div class="container">
            <table id="tableID">
                <tr class="data-head">
                    <td>Name</td>
                    <td>Phase</td>
                    <td>Money 1</td>
                    <td>Money 2</td>
                    <td>Money 3</td>
                </tr>
            <?php   
                while ($row = mysql_fetch_row($result, MYSQL_BOTH)) {
                  $id = $row[0];
                  $companyname = $row[1];
                  $client = $row[2];
                  $package = $row[3];
                  $payment1 = $row[4];
                  $payment2 = $row[5];
                  $payment3 = $row[6];


                  echo '<tr id="'.$id.'">';
                  echo '<td><b>'.$client.'</b></td>';
                  echo '<td>';
                  echo '<select class="phase" onchange="trackPhases(this.value)">';        
                           if($phase_status=='Design'){
                            echo '<option value="'.$phase_status.''.$id.'" selected>'.$phase_status.'</option>';
                            echo '<option value="Build-Out'.$id.'">Build-Out</option>';
                            echo '<option value="Launch'.$id.'">Launch</option>';
                           }
                           if($phase_status=='Build-Out'){
                            echo '<option value="Design'.$id.'">Design</option>';
                            echo '<option value="'.$phase_status.''.$id.'" selected>'.$phase_status.'</option>';
                            echo '<option value="Launch'.$id.'">Launch</option>';
                           }
                           if($phase_status=='Launch'){
                            echo '<option value="Design'.$id.'">Design</option>';
                            echo '<option value="Build-Out'.$id.'">Build-Out</option>';
                            echo '<option value="'.$phase_status.''.$id.'" selected>'.$phase_status.'</option>';
                           }
                  echo  '</select>';
                  echo  '</td>';
                  echo '</tr>';
                }
            ?>  
            </table>

        </div>
    </div>
    </div>
    </form>
    <div id="txtHint"></div>

这是我的Ajax脚本。我在html表代码上创建了一个下拉控件(只是一个示例)。当我在下拉列表中选择一个值 - select class="phase" onchange="trackPhases(this.value)时,它应该通过Ajax自动加载页面而不是刷新。

<script type="text/javascript">
function trackPhases(str)
    {
        if (str=="")
    {
        document.getElementById("txtHint").innerHTML="";
        return;
    } 
    if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
    else
        {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
            }
        }


    xmlhttp.open("GET","update.php?q="+str,true);
    xmlhttp.send();

}

我的index.php很好。但是我的Ajax脚本有问题。请帮帮我。

修改

<?php
  mysql_connect("localhost", "xx", "password");
  mysql_select_db('database');

  $query = "SELECT * FROM project";
  $result = mysql_query($query);

  ?>

修改

enter image description here

修改 update.php

<?php
 mysql_connect("localhost", "xx", "password");
 mysql_select_db('database');

 $query = "SELECT * FROM project";
 $result = mysql_query($query);

 $q = $_GET['q'];

 $id = ereg_replace("[^0-9]", "",$q);
 $phase_status = preg_replace('/[0-9]+/', '', $q);

 $sql = 'UPDATE project SET phase_status="'.$phase_status.'" WHERE id = '.$id;

 $retval = mysql_query($sql);
 if(! $retval ){
  die('Could not update data: ' . mysql_error());
 }

 ?>

1 个答案:

答案 0 :(得分:1)

我只想注意。

* 请使用PDOmysqli *

我使用mysql_query()只是为了适合你的代码


如果您给我们的update.php代码就像我们可以看到的那样。

当您没有发送输出时,您无法获得可以替换的响应!

的index.php

<script type="text/javascript">
function trackPhases(str)
{
....
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
      }
  }
....

xmlhttp.open("GET","update.php?q="+str,true);
xmlhttp.send();

update.php

.... 
$sql = 'UPDATE project SET phase_status="'.$phase_status.'" WHERE id = '.$id;

 $retval = mysql_query($sql);
 if(! $retval ){
  die('Could not update data: ' . mysql_error());
 }

您将获得的唯一输出是出现错误:

输出:

'Could not update data: ' . mysql_error());

并立即终止您的脚本..

因此,您的问题Load the current page via Ajax in php与您想要获得的内容无关。

你想要替换整个

<table id="tableID">
....
<?php   
  while ($row = mysql_fetch_row($result, MYSQL_BOTH)) {
....
</table>

使用table: project

中的内容

仅提示:

你可以把上面的

<table id="tableID">
....
<?php   
  while ($row = mysql_fetch_row($result, MYSQL_BOTH)) {
....
</table>

带有函数

的额外包含setSelect.php的代码
<?php 
function getSelect($result) {
?>
   <table id="tableID">
   ....
<?php   
   while ($row = mysql_fetch_row($result, MYSQL_BOTH)) {
?>
   </table> 
}
index.php中的

您的代码变为

<?php
include "setSelect.php";
....
?>
<div class="main-container">
    <div id="newCont" class="container">
       <?php  getSelect($result); ?>
    </div>
</div>

....
?>

update.php

<?php
include "setSelect.php";
 .... 
 $sql = 'UPDATE project SET phase_status="'.$phase_status.'" WHERE id = '.$id;

 $retval = mysql_query($sql);
 if(! $retval ){
  die('Could not update data: ' . mysql_error());
 }
 $query = "SELECT * FROM project";
 $result = mysql_query($query);
 if ($result) {
  getSelect($result);
 }
?>

现在您必须将getElementById()更改为

document.getElementById("newCont").innerHTML=xmlhttp.responseText;

匹配新创建的容器id

我很高兴你知道我的意思。