【问题标题】:Autocomplete HTML form from JSON从 JSON 自动完成 HTML 表单
【发布时间】:2016-10-18 20:52:49
【问题描述】:

好的,我有这个表格:

Form

当在第一个输入中输入名称时,我需要使用 SQL 表中的数据填充“ID”和“Email”。名称输入是使用 JSON 自动完成的,这里是 JSON 的示例:

[{
"label": "Andre Nadeau",
"Num": "104J",
"email": "Andre.Nadeau@example.com"
}, {
"label": "Andre Potvin",
"Num": "130J",
"email": "Andre.Potvin@example.com"
}],

我可以自动填写姓名字段,但我不明白如何在其他字段中发送 ID 和电子邮件数据。

PHP:

$query = $db->query("SELECT * FROM info_employer WHERE Prenom LIKE '%".$searchTerm."%' ORDER BY Prenom ASC");
while ($row = $query->fetch_assoc()) {
    $data[] = array(
        'label' => $row['Prenom'] . ' ' . $row['Nom'],
        'Num' => $row['Num'],
        'email' => $row['Email']
    );}

HTML:

<script>
        $(function() {
            $( "#Nom" ).autocomplete({
                source: 'Search.php',
            })
        })
</script>


<div class="form-group">
    <label for="Name">Nom: </label>
       <input type="text" id="Nom" class="form-control" name="Nom" required>
    <label for="Num">ID: </label>
       <input type="text" id="Num" class="form-control" name="Num">
    <label for="Email">Email: </label>
       <input type="text" id="Email" class="form-control" name="Email">

编辑:

我正在尝试使用 Feeda 的答案,一切都很有意义,但我很难让它发挥作用。

我将我的 PHP 更改为:

    $searchTerm = $_GET['term'];

//get matched data from table
$query = $db->query("SELECT * FROM info_employer WHERE Prenom LIKE '%".$searchTerm."%' ORDER BY Prenom ASC");
while ($row = $query->fetch_assoc()) {
    switch($option)   {
        case 'nom':
            $data[] = $row['Prenom'] . ' ' . $row['Nom'];
        case 'email':
            $data[] = $row['Email'];
    }

还有 Javascript:

        <script>
        $(function() {
            $( "#Nom" ).autocomplete({ source: 'Search.php?option=name', }) 
            $( "#email" ).autocomplete({ source: 'Search.php?option=email', })  
        })
    </script>

如果我理解正确,我应该能够使用 /Search.php?option=nom 并查看一些数据,但是当我在浏览器中尝试时给我一个带有“null”的空白页面。

当然我的自动完成功能还没有工作:(

更新

在这一点上,我不确定如果我创建一个新问题是否会更好,但我快到了!

借助我在这里获得的所有帮助,我能够获得所需的数据(谢谢大家

我现在的问题是我可以使用表单中的“姓名”字段找到用户,但是一旦我选择了用户,我需要使用链接到我数据库中用户的电子邮件自动完成电子邮件字段。 .

所以这里是我的代码:

HTML $(函数(){ $( "#Nom" ).autocomplete({ source: 'Search.php?option=nom', }) $( "#email" ).autocomplete({ source: 'Search.php?option=email', })
})

PHP

   //get search term
$option = $_GET['option'];
$searchTerm = $_GET['term'];

//get matched data from table
$query = $db->query("SELECT * FROM info_employer WHERE Prenom LIKE '%".$searchTerm."%' ORDER BY Prenom ASC");
while ($row = $query->fetch_assoc()) {
    switch($option)   {
        case 'nom':
            $data[] = $row['Prenom'] . ' ' . $row['Nom'];
        case 'email':
            $data[] = $row['Email'];
    }
}

//return json data
echo json_encode($data);

我认为我应该在最后一部分机器人中使用 Ajax,因为您可能已经猜到这不是我的技能之一。

更多更新

遵循 gschambial 的建议:

HTML

<script>
$(function(){
$('#Nom').autocomplete({
              minLength: 0,
              source: function (request, response) {
                  $.ajax({
                      type: "GET",
                      url: 'Search.php',
                      dataType: "json",
                      data: {term : request.term},
                      dataType: "json",
                      success: function (data) {
                          $.each(data,function(key, item){
                             return {
                               label : item.NumColumnName,
                               value : item.EmailColumnName
                             };
                          });
                      },
                      error: function (result) {
                          alert("Error");
                      }
                  });
              },
              select: function (event, ui) {
                          var Num = $("#Num");
                          var Email = $("#Email");
                          Num.val(ui.item.label);
                          Email.val(ui.item.value);
              }
          });     
  });        

PHP

    $searchTerm = $_GET['term'];

//get matched data from table
$query = $db->query("SELECT * FROM info_employer WHERE Prenom LIKE '%".$searchTerm."%' ORDER BY Prenom ASC");
while ($row = $query->fetch_assoc()) {
    switch($option)   {
        case 'nom':
            $data[] = $row['Prenom'] . ' ' . $row['Nom'];
        case 'email':
            $data[] = $row['Email'];
    }
}

//return json data
echo json_encode($data);

还是没有运气!

【问题讨论】:

  • 你能$(function() { $.ajax({ method: 'POST', url: 'Search.php' success: function(response) { console.log(response); }); }); 执行这段代码并告诉我你的php文件返回了什么吗?
  • 我尝试了代码,它返回了一个 Uncaught SyntaxError: Unexpected identifier in the console,不确定我是否遗漏了什么

标签: javascript php jquery json autocomplete


【解决方案1】:

自动完成需要一个数组,因此可以将这些数组分开并通过 ajax 获取。然后为每个相应地分配源。

while ($row = $query->fetch_assoc()) {
    $data['names'][] = $row['Prenom'] . ' ' . $row['Nom'];
    $data['ids'][] = $row['Num'];
    $data['emails'][] = $row['email'];

}

在 JavaScript 中:

source : data.names;

否则:

代替源码:Search.php试试。 Search.php?option=name

在 PHP 上。

switch($option)   {
 case 'name':
  $data[] = $row['Prenom'] . ' ' . $row['Nom'];
 case 'email':
    $data[] = $row['email'];
..
}

【讨论】:

  • 这个解决方案很有意义,但老实说我不知道​​如何使用 ajax。我了解 PHP 部分,但需要更多关于 JavaScript 的帮助。
  • 好吧,我理解开关,但是当我在名称字段中输入名称时,这将如何自动完成“电子邮件”字段?
  • $( "#Nom" ).autocomplete({ source: 'Search.php?option=name', }) $( "#email" ).autocomplete({ source: 'Search.php ?option=email', })
  • 非常感谢您花时间帮助我,
  • 如果您有时间看一下,我用我所做的更改编辑了问题:)
【解决方案2】:

我想,你需要这样的东西:

$(function(){
$('#Nom').autocomplete({
              minLength: 0,
              source: function (request, response) {
                  $.ajax({
                      type: "POST",
                      url: 'Search.php',
                      dataType: "json",
                      data: {term : request.term},

                      success: function (data) {
                          $.each(data,function(key, item){
                             return {
                               label : item.nom,
                               value : item.email
                             };
                          });
                      },
                      error: function (result) {
                          alert("Error");
                      }
                  });
              },
              select: function (event, ui) {
                          var Num = $("#Num");
                          var Email = $("#Email");
                          Num.val(ui.item.label);
                          Email.val(ui.item.value);
              }
          });     
  });        

PHP 代码:

$post_data= json_decode(file_get_contents('php://input'), true); 
print_r($post_data); 
$searchTerm = $post_data["term"];
    $data= array();

    //get matched data from table
    $query = $db->query("SELECT * FROM info_employer WHERE Prenom LIKE '%".$searchTerm."%' ORDER BY Prenom ASC");
    while ($row = $query->fetch_assoc()) {

                $data["nom"] = $row['Prenom'] . ' ' . $row['Nom'];
                $data["email"] = $row['Email'];

    }
    //return json data
    echo json_encode($data);

试试这个!我希望,它会解决你的目的。

【讨论】:

  • 感谢您的输入,如果我使用您给我的函数的精确副本,我的 error.log 中会出现一些错误:PHP 注意:未定义索引:/var/www/html/ 中的选项Search.php 第 12 行,referer:absence.com PHP 注意:未定义索引:/var/www/html/Search.php 第 13 行中的术语,referer:absence.com PHP 注意:未定义变量:/var/ 中的数据www/html/Search.php 第31行,referer:absence.com
  • @ayyyymtl 当您有一些未初始化的变量时会出现此错误。
  • 已将 searchTerm 更改为 term。检查我更新的答案。
  • @ayyyymtl 同时从您的Search.php 文件中删除$option = $_GET['option'];
  • @ayyyymtl 别担心,自动完成功能正在运行,非常棒。我们现在将进入下一部分。
猜你喜欢
  • 2017-04-27
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 2021-05-09
  • 2017-09-10
  • 2021-04-14
  • 2023-03-23
相关资源
最近更新 更多