0

我是新来的,所以我希望这是有道理的。我是 PHP 和 Ajax 的新手……所以我很迷茫。

我有一个 MySQL 数据库设置,以及几个用 PHP 创建的表单。我在其中一个表单上有几个文本字段,应该显示客户信息。第一个文本(电话号码)字段应该是一个搜索字段......所以一旦用户完成输入电话号码,我需要查询我的数据库,以查找记录并填充其余字段。

我已经尝试了各种方法来做到这一点......但没有什么是完全正确的!似乎最有希望的方法是使用 Onblur 事件调用将执行搜索的 php 页面(使用 Ajax)。

行得通,因为我可以查询数据库以查找结果..并将它们显示回来。问题是这个包含数据的页面实际上显示在我的第一页的中间......所以基本上我有一个网页显示在另一个里面......这显然不是我想要的。

我的基本代码是:

HTML 方面——

    <script>
    function showUser(str) {
        if (str == "") {
            document.getElementById("divider").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) {
                document.getElementById("divider").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "GetCustomer.php?q="+str, true);
        xmlhttp.send();
    }
</script>
</head>
  <label for="CustPhone">Phone:</label>
  <input type="text" name="CustPhone" id="CustPhone" tabindex="1" onchange="showUser(this.value)" value="<?php  ?>">                   
    <br>
   <div id="divider"></div>

<label for="CustLastName">Last Name:</label>
   <input type="text" name="CustLastName" id="CustLastName" tabindex="2" value="<?php echo $clast;  ?>">
   &nbsp;&nbsp;&nbsp;&nbsp;
   <label for="CustFirstName">First Name:</label>
   <input type="text" name="CustFirstName" id="CustFirstName" tabindex="3" value="<?php echo $cfirst;  ?>">

   <p>&nbsp;</p>

   <label for="CustAddress1">Address 1:</label>
   <input type="text" name="CustAddress1" id="CustAddress1" tabindex="4" value="<?php echo $caddr1; ?>">

    &nbsp;&nbsp;&nbsp;&nbsp;
    <label for="CustAddress2">Address2:</label>
    <input type="text" name="CustAddress2" id="CustAddress2" tabindex="5" value="<?php echo $caddr2; ?>">

    <p>&nbsp;</p>

和 PHP——

include ("AddEdit.php");
require_once("customer_info.php");

function LoadData()
{
$pn = $_POST['CustPhone'];

if (strlen($Pn) < 10)
{
    $query = "SELECT * FROM customer WHERE Phone='$Pn'";
    $result = mysql_query($query);

    if (!$result) die ("Database access failed: " . mysql_error());
    $rows = mysql_num_rows($result);
    $rowinfo = mysql_fetch_array($result); 

    if ($rows > 0)
    {
        $clast = $rowinfo['LastName'];
        $cfirst = $rowinfo['FirstName'];
        $caddr1 = $rowinfo['Address1'];
        $caddr2 = $rowinfo['Address2'];
        $ccity = $rowinfo['City'];
        $cprov = $rowinfo['Province'];
        $cpostal = $rowinfo['Postal'];
    }
}

}

关于如何在不跳动的情况下做到这一点的任何想法......或者更重要的是只在现有页面上显示数据,而不是在页面内显示整个页面的较小版本?

谢谢!!!

4

2 回答 2

0

首先,我建议使用 jQuery ajax 而不是旧的 ajax。

我认为您的结果不在正确的位置,因为您在这行代码中使用了“innerHTML”

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

所以你的结果会在那里。

于 2013-05-10T04:23:57.947 回答
0

我会推荐使用 Jquery Ajax,更简单易用的 Ajax 方法。
有关更多详细信息,请参阅Jquery Ajax。因此,您可以按如下方式更改您的 Ajax 调用:

$.ajax({
            type: "POST",
            url:"GetCustomer.php",
            data: "q="+str,
            success : function(data) {
                //do someting with your data
                }
            }

        });

有了这个,您可以处理错误状态以及在 Ajax 调用正在进行时显示“进行中”栏。

成功时,您需要将数据与表单中的字段映射,而不是在 div 中显示它们。这是您的方法中唯一缺少的东西。因此,而不是以下行 -

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

添加 JS 代码以将数据与字段映射。

您可以使用 JSON 数据类型并轻松地将数据映射到您的表单。

于 2013-05-10T04:26:58.983 回答