使用jQuery标签 - 它使用php,mysqli,json将2个变量返回到2个不同的字段

时间:2013-06-26 13:34:44

标签: php jquery json mysqli tag-it

可能是最糟糕的问题,但我不知道怎么说出来。

基本上我已将jQuery tag-it实现到我的代码中。但是,我正在使用来自其他用户的解决方案,只要它能够提取我想要的数据并将其转储到我需要的输入中,就能正常工作。

我得到的解决方案是:

jQuery的:

$(document).ready(function(){
var availableTags = <?php include("ajax-search.php"); $english = search();?>;
$("#livesearch").tagit({
    autocomplete: { 
        source: availableTags
    }
});
 });

PHP /库MySQLi:

function search() {
include("dbconnect.php"); //Including our DB Connection file
$sql = "SELECT * FROM animals";
$query = mysqli_query($db, $sql);

while ($result = mysqli_fetch_assoc($query)){
    $english[] = $result['eng_names'];
}
echo json_encode($english);
}

基本上我想要返回3个变量。英语,拉丁语和地位。

所以,前提是:

Status = English == Latin

因此,在状态中,我有灭绝,濒危,野外灭绝等等。但是有些动物不属于这些列表中的任何一个。这些动物可能很常见,因此不需要特殊标签,但它们都需要具有拉丁名称。

目的是如果用户输入'Extinct',将显示所有死亡动物的列表。

为什么要使用标签?好吧,因为他们是报道。用户将编写报告并标记其中涉及的任何动物。需要返回动物的名称(拉丁语和英语),但不是状态。

我想我理解json如何做到这一点。只需添加它们。如果该字段在状态列中没有文本,则忽略它。但是,我不知道如何从mysqli搜索返回它。我认为该方法是.map(),但每当我使用.map()时,搜索功能都会中断(如同列出所有生物一样,但是如果你输入它就不会漏掉搜索。

修改

喜悦。所以,我设法弄清楚如何匹配我困惑的两个参数。

我是通过修改原始jQuery来实现的:

<script>
$(document).ready(function(){
$("#livesearch").tagit({
    autocomplete: {
        source: 'ajax-search.php',
        minLength:1
    }
   });
  });
</script>

然后在HTML中我添加了一个post方法:

<form method="post">
  <input name="tags" id="latin" size="100%" disabled="true"> 
  <ul id="livesearch"></ul>
  <input type="submit" value="Submit" />                
</form>

但搜索都发生在PHP / MySQLi查询中:

if ( !isset($_REQUEST['term']) )
exit;

$keyword = trim($_REQUEST['term']);
$keyword = mysqli_real_escape_string($db, $keyword);
$query = "SELECT * FROM animals WHERE english LIKE '%$keyword%' OR status LIKE '%$keyword%'";       
$result = mysqli_query($db, $query); //Run the Query
$data = array();

if ($result && mysqli_num_rows($result)){
  while($row = mysqli_fetch_assoc($result)){
    $data[] = array(
   'label' => $row['english'],
   'value' => $row['english'],
   'latin' => $row['latin']
    );
   }
 }
 echo json_encode($data);
flush();

所以,如果我搜索状态(灭绝,濒临灭绝等),它会返回正确的动物。

我从these guys得到了这个想法/代码。

所以我现在停留在需要在两个不同的领域展示拉丁语和英语的部分,但我认为这需要做一些摆弄tag-it.js源代码。如果我弄明白,我会更新。

编辑2:

好的,我设法将两个不同的结果放入两个不同的文本字段中。但它并没有将输入关闭到标签中。

这是修改过的jQuery:

    $("#livesearch").tagit({
    autocomplete: {
        source: "ajax-search.php",
        select: function(evt, ui){
            this.form.latin.value = ui.item.latin;
        }
    }
});

它的作用是将拉丁文放在拉丁文本输入中。但它现在并没有像以前那样将输入包装成一个整洁的小标签。

编辑3

我尽可能地走了,但没有用。

基本上我已经通过扩展自动完成字段在tag-it.js中添加了变量调用:

    // Autocomplete.
    if (this.options.availableTags || this.options.tagSource || this.options.autocomplete.source) {
        var autocompleteOptions = {
            select: function(event, ui) {
                that.createTag(ui.item.value);
                that.createTag(ui.item.latin); //custon input?
                // Preventing the tag input to be updated with the chosen value.
                return false;
            }
        };
        $.extend(autocompleteOptions, this.options.autocomplete);

然而,所有这一切都是同时添加动物的常规英文名称​​和动物的拉丁名字。然后我可以删除英文名称,但这太长了。

我尝试使用似乎有用的this.form.latin.value = ui.item.latin;,但是如果我添加了一些标签,或者如果我删除一个标签,整个代码就会中断。这似乎是单向的,所以这不是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

决定使其他输入可编辑。这不是一个最佳解决方案,但它必须暂时做到。我将更新此内容并将其转换为Wiki,以供其他需要类似Tag-It代码功能的人使用。