Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Jquery autocomplete e PHP:preenchendo o campo de entrada com dados do banco de dados mySQL com base na opção selecionada no campo autocomplete


Eu construí exatamente esta função em um aplicativo meu. Há uma camada adicional de complexidade aqui, pois há duas pesquisas de subúrbio (endereços de casa e do trabalho), cada uma preenchendo campos de estado e código postal correspondentes. O back-end é perl em vez de PHP, mas isso não é relevante para o manuseio do lado do cliente. Por fim, o back-end está retornando uma estrutura JSON com uma matriz de hashes como esta:
[ { "id":"...", "value":"...", "state":"...", "pcode":"..." }, ... ]

A chave id contém o nome do subúrbio e a chave de valor contém strings como "JOLIET IL 60403", então o conjunto correto de dados é escolhido uma vez, resolvendo o problema de várias cidades/subúrbios com o mesmo nome em lugares diferentes, e fazendo call-backs para resolver isso.

Uma vez selecionados, os valores suburb (id), state e pcode são injetados nos parâmetros correspondentes.

O código a seguir também armazena em cache os resultados anteriores (e o cache é compartilhado entre as pesquisas em casa e no trabalho).
$('#hm_suburb').addClass('suburb_search').attr(
         {suburb: '#hm_suburb', pcode: '#hm_pcode', state: '#hm_state'});
$('#wk_suburb').addClass('suburb_search').attr(
         {suburb: '#wk_suburb', pcode: '#wk_pcode', state: '#wk_state'});
var sub_cache = {};
$(".suburb_search").autocomplete({
    source: function(request, response) {
        if (request.term in sub_cache) {
                response($.map(sub_cache[request.term], function(item) {
                    return { value: item.value, id: item.id,
                             state: item.state, pcode: item.pcode }
                }))
            return;
        }
        $.ajax({
            url: suburb_url,
            data: "term=" + request.term,
            dataType: "json",
            type: "GET",
            contentType: "application/json; charset=utf-8",
            dataFilter: function(data) { return data; },
            success: function(data) {
                sub_cache[request.term] = data;
                response($.map(data, function(item) {
                    return {
                        value: item.value,
                        id: item.id,
                        state: item.state,
                        pcode: item.pcode
                    }
                }))
            } //,
            //error: HandleAjaxError  // custom method
        });
    },
    minLength: 3,
    select: function(event, ui) {
        if (ui.item) {
            $this = $(this);
            //alert("this suburb field = " + $this.attr('suburb'));
            $($this.attr('suburb')).val(ui.item.id);
            $($this.attr('pcode')).val(ui.item.pcode);
            $($this.attr('state')).val(ui.item.state);
            event.preventDefault();
        }
    }
});