【问题标题】:ajax call to populate form fields from database query when select value changesajax call to populate form fields from database query when select value changes
【发布时间】:2013-11-13 15:31:36
【问题描述】:

我一直在查看这里的问题,无法找到我所追求的确切答案:(但我设法得到了一些东西。

我有一个从数据库查询中填充的表单选择字段

<select style="width:100%;" class="quform-tooltip chosen-select" id="company_select" name="company_select" title="Company Select" onChange="showUser(this.value)">
<option value="">Please select</option>
<?php
$userID = $user->getUserID();
$query = $user->database->query("SELECT * FROM tbl_businesses as business LEFT JOIN tbl_user_businesses as biz_user ON business.businessID = biz_user.businessID WHERE biz_user.userID ='$userID'");

while($row=$user->database->fetchArray($query))
{
    $bizID = $row['businessID'];
    $bizName = $row['businessName'];
    echo "<option value='$bizID'>$bizName</option>";
}?>
</select>

然后,当更改/选择上述选择框值时,我想填充其他 2 个文本框(最终可能会增加)

<input id="company_name" type="text" name="company_name" value="" />
<input id="company_email" type="text" name="company_email" value="" />

所以我的选择框上有一个 onchange 函数

<script>
function showUser(str)
{
if (str=="")
{
    document.getElementById("company_name").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)
    {
        var data = JSON.parse(xmlhttp.responseText);
        for(var i=0;i<data.length;i++) 
        {
          document.getElementById("company_name").innerHTML += data[i].id + ' - ' + data[i].name + ' - ' + data[i].web;
        }
    }
}
xmlhttp.open("GET","formdata.php?q="+str,true);
xmlhttp.send();
}
</script>

而我的formdata.php文件就是这样

    <?php
include("include/user.php");

$q = intval($_GET['q']);

$sql="SELECT * FROM tbl_businesses WHERE businessID = '".$q."'";

$result = $user->database->query($sql);
$info = array();
while($row=$user->database->fetchArray($result))
{
    $cID = $row['bussinessID'];
    $cName = $row['businessName'];
    $cWeb = $row['businessWebsite'];
    $info[] = array( 'id' => $cID, 'name' => $cName, 'web' => $cWeb );
}
echo json_encode($info);?> 

正确调用 ajax 并返回预期的数据,但我现在需要帮助来填充文本框值?

任何人都可以帮我解决这个问题,我花了很长时间试图弄清楚,我不熟悉 javascript/json 所以不知道从哪里开始

我希望将 company_name 文本框的值设置为 $cName;和 company_email 文本框值设置为 $cWeb;

感谢任何帮助

卢克

【问题讨论】:

  • 从浏览器控制台中找到的请求中复制响应并查看它是否在 jsonlint.com 中验证...可能有一些来自 php 的意外输出
  • 嗨,是的,响应验证正常,响应的示例是 code[{"id":"5","name":"My Company 5","web":"www .samplewebsite.com"}]code 谢谢
  • 如果textboxes是表单输入,或者textarea需要设置值,而不是innerHTML
  • 嗨 charlietfl 是的,对不起,意味着表单输入 :) 谢谢你将 innerHTML 更改为 value 工作了 :) 谢谢

标签: javascript ajax database json


【解决方案1】:

好的,我使用的解决方案,对于其他想知道我如何解决它的人来说

我的 index.php 包含 javascript 和表单代码

javascript代码

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js" type="text/javascript"></script>

<script>
function showUser(str)
{
if (str=="")
{
    document.getElementById("company_name").value="";
    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)
    {
        var data = JSON.parse(xmlhttp.responseText);
        for(var i=0;i<data.length;i++) 
        {
          document.getElementById("company_name").value = data[i].name;
          document.getElementById("company_email").value = data[i].web;
        }
    }
}
xmlhttp.open("GET","formdata.php?q="+str,true);
xmlhttp.send();
}
</script>

和表单代码

    <select style="width:100%;" class="quform-tooltip chosen-select" id="company_select" name="company_select" title="Company Select" onChange="showUser(this.value)">
<option value="">Please select</option>
<?php
$userID = $user->getUserID();
$query = $user->database->query("SELECT * FROM tbl_businesses as business LEFT JOIN tbl_user_businesses as biz_user ON business.businessID = biz_user.businessID WHERE biz_user.userID ='$userID'");

while($row=$user->database->fetchArray($query))
{
    $bizID = $row['businessID'];
    $bizName = $row['businessName'];
    echo "<option value='$bizID'>$bizName</option>";
}?>
</select>

<input id="company_name" type="text" name="company_name" value="" />
<input id="company_email" type="text" name="company_name" value="" />

然后是我的 formdata.php

    $q = intval($_GET['q']);

$sql="SELECT * FROM tbl_businesses WHERE businessID = '".$q."'";

$result = $user->database->query($sql);
$info = array();
while($row=$user->database->fetchArray($result))
{
    $cID = $row['businessID'];
    $cName = $row['businessName'];
    $cWeb = $row['businessWebsite'];
    $info[] = array( 'id' => $cID, 'name' => $cName, 'web' => $cWeb );
}
echo json_encode($info);?> 

就是这样,感谢 charlietfl 的帮助!

希望这对某人有帮助:)

【讨论】:

    【解决方案2】:

    这是一个使用 PHP 和 JQuery 的示例。如果您不熟悉 JQuery,我建议您在继续使用 ajax 之前花点时间深入了解它,这绝对值得。 JQuery 有像getajax 这样的方法来向服务器发出异步请求。

    现在,这是我们用来从服务器获取 JSON 数据的一些 jquery。

    var title = '.....'
    $.getJSON('getActivite.php?title=' + title, null,
            function(data){
                $("#currentId").val(data.ID);
                $("#nomActivite").val(data.Nom);
                $("#Description").val(data.Description);
                $("#DateEvent").val(data.Date);
    });     
    

    $("#currentId").val(data.ID); ,这表示:在 DOM 中找到 id 为 currentId 的元素,并将其值更改为从 ajax 调用接收到的数据的属性 ID。

    在 PHP 方面,他们有

    <?php
        header('Content-Type: application/json');
    
        mysql_connect("localhost","root") or die (" NOPE . [" . mysql_error() . "]");
        mysql_select_db("garderie");
    
    
        $title  = $_GET["title"]; // we received this from the json call
    
    
        $query = "  select a.ActiviteID as ActiviteID  , rtrim(a.Nom) as Nom, a.Description from activites a inner join .....' ";
    
    
        $result = mysql_query($query);       
        $ligne  = mysql_fetch_array($result);
    
        $data = array(
            'ID'            => $ligne["ActiviteID"],
            'Nom'           => $ligne["Nom"],
            'Description'   => $ligne["Description"],
            'Date'          => $date
        );
    
        mysql_close();
    
        echo (json_encode($data));
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多