sql >> Database teknologi >  >> RDS >> Mysql

Jquery autocomplete og PHP:udfylder inputfelt med data fra mySQL database baseret på valgt mulighed i autocomplete felt

Jeg har bygget præcis denne funktion ind i min app. Der er et ekstra lag af kompleksitet her, idet der er to forstadsopslag (hjemme- og arbejdsadresser), som hver udfylder matchende tilstands- og postnummerfelter. Back-end er perl snarere end PHP, men det er ikke relevant for håndteringen på klientsiden. I sidste ende returnerer back-end en JSON-struktur med en række hashes som denne:

[ { "id":"...", "value":"...", "state":"...", "pcode":"..." }, ... ]

Id-nøglen indeholder forstadsnavnet, og værdinøglen indeholder strenge som "JOLIET IL 60403", så det korrekte sæt af data vælges én gang, hvilket løser problemet med flere byer/forstæder med samme navn forskellige steder, og ringer tilbage for at løse det.

Når den er valgt, injiceres forstads- (id), tilstand og pcode-værdier i de matchende parametre.

Følgende kode cacherer også tidligere resultater (og cachen deles mellem hjemme- og arbejdsopslag).

$('#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();
        }
    }
});


  1. MySQL:Opdele et stort bord i partitioner eller separate tabeller?

  2. Postgres:Distinkt, men kun for én kolonne

  3. PHP og MySQL mindste og størst mulige dato

  4. array_agg for arraytyper