php - 使用 Geonames 和 MYSQL 进行 JQuery 自动完成

标签 php jquery mysql autocomplete

我尝试创建一个多功能搜索栏,不仅可以查找城市(使用 Geonames),还可以使用相同的输入字段来查找注册用户(使用我的 MYSQL 表)。

我成功地分别实现了这两个目标,但是我无法将代码合并在一起。

geoname 自动完成功能的 JQuery 代码:

$(function() {
$( "#top_search_field" ).autocomplete({
    source: function( request, response ) {
        $.ajax({
            url: "http://api.geonames.org/searchJSON?username=dummie",
            dataType: "jsonp",
            data: {
                featureClass: "P",
                style: "full",
                country: "AT",
                maxRows: 12,
                name_startsWith: request.term
            },
            success: function( data ) {
                response( $.map( data.geonames, function( item ) {
                    return {
                        label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
                        value: item.name
                    }
                }));
            }
        });
    },
    minLength: 2,
    select: function (event, ui) {
        var selectedObj = ui.item;
        jQuery("#top_search_field").val(selectedObj.value);
        return false;
    },

    open: function () {
        jQuery(this).removeClass("ui-corner-all").addClass("ui-corner-top");
    },
    close: function () {
        jQuery(this).removeClass("ui-corner-top").addClass("ui-corner-all");
    }
});
});

从表中获取用户的代码:

$(function() {

$( "#top_search_field" ).autocomplete({
     source:'php_includes/search.php',
     minLength: 2,
     open: function () {
        jQuery(this).removeClass("ui-corner-all").addClass("ui-corner-top");
    },
    close: function () {
        jQuery(this).removeClass("ui-corner-top").addClass("ui-corner-all");
    }
})


});

搜索.php

include_once("db_connect.php");

$stmt = $db_connect->query("SELECT user_auth, first_name, last_name, avatar FROM users WHERE (first_name LIKE '%".$_REQUEST['term']."%' OR last_name LIKE '%".$_REQUEST['term']."%') ");

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$results[] = array('label' => utf8_encode($row['first_name'].' '. $row['last_name'] ) );
}

echo json_encode($results);
<小时/>

将代码合并在一起并能够同时查找城市和用户的最佳方法是什么?

最佳答案

您需要提供一项服务来从多个服务获取信息,将它们组合起来并响应您的自动完成结果。假设您有一个名为 advanced_search.php 的服务。在此文件中;

<?php
$keyword = $_GET["keyword"];
$result = array();

$usersReturnedFromService = getUsersFromService($keyword); // Get users from service by using curl

foreach ($usersReturnedFrom as $user) {
    array_push(array("type" => "user", "value" => $user));  
}

$geoNamesReturnedFromService = getGeoNamesFromService($keyword); // Get geonames from service by using curl

foreach ($geoNamesReturnedFromService as $geoname) {
    array_push(array("type" => "geoname", "value" => $geoname));    
}


// When you sort, result will mixed 
function compareArr($a, $b){
    $ad = strtotime($a['value']);
    $bd = strtotime($b['value']);
    return ($ad-$bd);
}

usort($result, 'compareArr');

echo json_encode($result);

在js端;

$(function() {
    $( "#top_search_field" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                url: "advanced_search.php?keyword=" + request.term, // put other variables here. I have only put term
                success: function( data ) {
                    response( $.map( data, function( item ) {
                        return {
                            label: item.value, // john
                            value: item.type + "|" + item.value // user|john
                        }
                    }));
                }
            });
        },
        minLength: 2,
        select: function (event, ui) {
            var selectedObj = ui.item;
            jQuery("#top_search_field").val(selectedObj.value);
            return false;
        },

        open: function () {
            jQuery(this).removeClass("ui-corner-all").addClass("ui-corner-top");
        },
        close: function () {
            jQuery(this).removeClass("ui-corner-top").addClass("ui-corner-all");
        }
    });
});

关于php - 使用 Geonames 和 MYSQL 进行 JQuery 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22912601/

相关文章:

php 或 mysql 时间戳关闭 7 小时

javascript - 在 .JS 文件中使用 PHP?

javascript - 具有动态生成内容的闭包

php - Magento - 顶部类别名称旁边的图像

php - MYSQL 不正确的 DATETIME 格式

javascript - 在 JavaScript 中查找 2 个 JSON 数组之间的匹配 JSON 项目,并将 CSS 应用于 UL 列表中的匹配项目

javascript - 单击时隐藏和显示无序列表的元素

mysql - 对大型表(有两个左连接表)的查询结果非常慢

mysql - 如何从表中获取最低值

mysql - MySQL InnoDB(插入)性能优化的操作方法?