jQuery-JSON-PHP és input mezők


Néha előfordul a webfejlesztő életébe az hogy az űrlap egy apró változására egy vagon adatot kéne produkálni. Ezzel semmi gond nincs, de jó volna ha az oldalt nem kéne újratölteni.

Ekkor jön jól a jQuery és a getJSON funkciója, amivel asszinkron kérést indíthatunk, majd a kapott JSON formátumban lévő eredményt feldolgozhatjuk vele. A feldolgozás során lehetőségünk van az adatok HTML INPUT mezőkben történő betöltésére.



A program bár rendkívül egyszerű mégis hasznos funkciók alapját mutatja be. A mintaprogramot megtekintheted működés közben és letöltheted a cikk mellékleteként.

Mit is tanulhatunk a példaprogramból:

  • Több Input mező feltöltése anélkül, hogy újra kéne tölteni az oldalt
  • Szerver oldalon meghatározni adott input elemeket értékét
  • jQuery getJSON utasítás használatát
  • Billentyűzet felengedésre esemény indítást
  • PHP, Tömöbök, <a href="http://www.json.org" title="JSON">JSON</a> kapcsolatát

A HTML kód:

  1.         <form id="urlap" action="submit.php" method="post">
  2.             <dl>
  3.                 <dt>Ez a keresett szöveg (írj be egy nevet):</dt>
  4.                 <dd>
  5.                     <input type="text" class="keresett-karakterek" name="kereso_string" value="" /><input id="nevkereses" type="button" value="&rarr;" name="ok">
  6.                     <!-- ide kerülnek a ul/li listaelemek az ajax kérésből !-->
  7.                     <div id="tippek" style="display:none;"></div>
  8.                 </dd>
  9.  
  10.                 <!-- ez a rész addig rejtve marad, amig nincs a válaszban éték adva nekik !-->
  11.                 <dl id="eredmeny" style="display:none;">
  12.                     <dt>Ezt fogjuk feltölteni (ID):</dt>
  13.                     <dd><input type="text" class="feltoltes" id="id" name="id" value="" readonly="readonly"/></dd>
  14.                     <dt>Ezt fogjuk feltölteni (Név):</dt>
  15.                     <dd><input type="text" class="feltoltes" id="nev" name="nev" value="" readonly="readonly"/></dd>
  16.                     <dt>Ezt fogjuk feltölteni (Cím):</dt>
  17.                     <dd><input type="text" class="feltoltes" id="cim" name="cim" value="" readonly="readonly" /></dd>
  18.                     <dt>Ezt fogjuk feltölteni (Telefon):</dt>
  19.                     <dd><input type="text" class="feltoltes" id="telefon" name="telefon" value="" readonly="readonly" /></dd>
  20.                     <dt>&nbsp;</dt>
  21.                     <dd><input id="elkuldes" type="submit" value="Elküldés" name="post"></dd>
  22.                 </dl>
  23.  
  24.             </dl>
  25.         </form>

Amire a HTML-ben érdemes odafigyelni:

class="keresett-karakterek"
Nincs szerepe az adott elemen a stílus meghatározásban. Ez csak a kijelölés megkönnyítésére tettem rá.

id="tippek"
Ide kerülnek a gépeléskor indított keresés választható eredményei

id="eredmeny"
Ez a rész csak akkor jelenik meg, mikor feltöltésre került adattal. Itt vannak azok az Input mezők amiket szeretnénk feltölteni. Fontos, hogy az adott HTML input ID-je, mert az értékét ez alapján kapja a JSON válaszból.

Stílus, CSS fájl tartalma:

Nincs igazán jelentősége a példaprogramban, igazából csak arra kell, hogy valahogy kinézzen a dolog.

  1. /*.keresett-karakterek{background:#FFFCDF;}*/
  2. dl {}
  3. dt {font-weight:bold;}
  4. dd {margin:0px 50px;padding:0px 50px;}
  5.  
  6. #eredmeny {border:1px solid #ccc;background:#f7f7f7;padding:10px;margin:20px 0px;}
  7. #tippek {font-size:12px;border:1px solid #ccc;background:#f7f7f7;padding:10px;margin:0px 0px 50px 0px;width:250px;}
  8. #tippek ul {list-style-type:none;padding:0;margin:0;}
  9. #tippek li {cursor:pointer;border-bottom:1px solid #f2f2f2;padding:2px 0px;}
  10. #tippek li:hover {background:#ccc;cursor:pointer;font-weight:bold;}

JQuery kódok, billentyűzet felengedés és autocomplete funkció

  1. <script type="text/javascript">
  2. <!--
  3. $(document).ready(function() {
  4.  
  5.     //első indulás
  6.     $("#tippek,#eredmeny").hide();
  7.     $(".keresett-karakterek").focus();
  8.  
  9.  
  10.     //Billentyű felengedés volt a kereső mezőben
  11.     $(".keresett-karakterek").keyup(function(){
  12.         var keresetSzoveg = $(".keresett-karakterek").val();
  13.         if(keresetSzoveg.length<2){
  14.             return false;
  15.         }
  16.         var urlLoad = "./kiegeszites.php?q="+keresetSzoveg;
  17.        
  18.         //<div id="tippek"-be betöltjük a lista elemeket
  19.         $("#tippek").load(urlLoad);
  20.         $("#eredmeny").hide();
  21.         $("#tippek").show();
  22.      
  23.     });
  24.  
  25.  
  26.  
  27.     //autocomplete -> kattintás a felkínált eredményen
  28.     $("#tippek li").live("click",function(){
  29.        
  30.         //kattintás volt a lista elemen
  31.         //kiszedjük a Li elem szöveges részét
  32.         var bruceLiiText = $(this).text();
  33.         //a szöveges Li részt bemásoljuk a keresőbe
  34.         $(".keresett-karakterek").val(bruceLiiText);
  35.  
  36.         //felesleges mezők elrejtése
  37.         $("#tippek,#eredmeny").hide();
  38.  
  39.         //kiválasztás után eseményt adunk az input mezőnek
  40.         //így elindulhat a getJSON kérés
  41.         $("#nevkereses").click();
  42.     })
  43.  
  44.    
  45. });
  46. //-->
  47. </script>

A működésről röviden

Billentyűzet felengedés (keyup) hatására, ha string sorozat elég hosszú, elindul egy kérés a kiegeszites.php fajl felé, és a válaszban feltéve hogy volt találat az adott keresésére visszaad egy HTML ul li listát.
A lista elemre (li) történő kattintáskor a szöveges tartalmát átmásolom a kereső input mezőben és megindulhat a mezők feltöltése.

A lista generáló PHP kód:

A teszt_adatok.php egy tömb ami neveket tartalmaz (ez egy jQuery plugin-ból tesztfájlból való). Ez a fájl készíti el a választható találati listát.

  1. <?php
  2. error_reporting(0);
  3.  
  4. //teszt adatok tömb
  5. require_once './teszt_adatok.php';
  6.  
  7. //ebben van a keresett kifejelzés
  8. $q=strtolower(strip_tags($_GET["q"]));
  9. //die(var_dump($_GET));
  10.  
  11. //ebben mennek vissza az adatok
  12. $return = false;
  13. $i=0;
  14. $maxElem=10;
  15. foreach ($datas as $key=>$value) {
  16.     if($i>$maxElem){continue;}
  17.     if (strpos(strtolower($key), $q) !== false) {
  18.         $return[]=$key;
  19.         $i++;
  20.     }
  21. }
  22.  
  23. if(!$return){
  24.     $return[]="Nincs találat";
  25. }
  26.  
  27. $ret="<ul>";
  28. foreach($return as $value){
  29.     $ret.="<li>{$value}</li>";
  30. }
  31. $ret.="<ul>";
  32. die($ret);

jQuery getJSON  kérés elindítása, eredmény feldolgozása:

A programnak ez a lelke. Ő indítja a kérést, ő fogadja a választ és írja ki a hibaüzenetet, ha kell.

  1. <script type="text/javascript">
  2. <!--
  3. $(document).ready(function() {
  4.  
  5.     //a nevkereses gomb click eseményének feldolgozása
  6.     $("#nevkereses").click(function(){
  7.  
  8.         //keresett string bekérése, és ellenőrzése
  9.         var keresetSzoveg=$(".keresett-karakterek").val();
  10.        
  11.         //szöveg üres?
  12.         if(keresetSzoveg==""){
  13.             alert("írjál be valamit");
  14.             return false;
  15.         }
  16.  
  17.         //szöveg hossz teszt
  18.         if(keresetSzoveg.length<2){
  19.             alert("A beírt szöveg rövid!");
  20.             return false;
  21.         }
  22.  
  23.         //felesleges mezők elrejtése
  24.         $("#tippek,#eredmeny").hide();
  25.  
  26.         //php fájl címe
  27.         var url="./json.php";
  28.  
  29.         //(url,param,feldolgozó_függvény(visszakapott adatok))
  30.         $.getJSON(url, {q:keresetSzoveg}, function(data){                       
  31.             $.each(data, function(i,item){
  32.                 if(i=="err"){
  33.                     //ha hiba kulcs van akkor nem sikerült
  34.                     alert(item);
  35.                     return false;
  36.                 }                                                      
  37.                 //fetöltjük az [i] kulcs id-val rendelkező
  38.                 //input mezőket
  39.                 $("#"+i).attr("value",item);                          
  40.             });
  41.         });
  42.         //eredmény div-et megjelenítjük
  43.         $("#eredmeny").show();
  44.         return false;
  45.     });
  46.  
  47.    
  48. });
  49. //-->
  50. </script>

A kereső mező mellet lévő gombra kattintva vagy a találati listára történő kattintáskor indul az eseménykezelés. Ha minden rendben és a kereső szó is megfelelő hosszal rendelkezik akkor egy kérést indít a json.php fájlnak és JSON formátumú választ vár.

A JSON válasz kulcs mindig az adott feltölteni kívánt INPUT mező ID-je

PHP oldalon a válaszban határozzuk meg, hogy melyik ID azonosítóval rendelkező Input mező melyik értéket kapja. A $return tömb feltöltése a kereső mező értékére a teszt_adatok.php-ból keresi ki az adott elemet amire illeszkedik.

  1. //a tömb feltöltése input id="kulcs" és értéknek megfelelően
  2. //ez egy lényeges rész hogy a kulcs=<input id=neve
  3. $return =array(
  4.         "id" => rand(0,1000),
  5.         "nev" => $key,
  6.         "cim" => "Lorem Ipsum u. ".rand(0,100),
  7.         "telefon" => md5($key),
  8. );
  9.  
  10. die(json_encode($return));

Ha bővebben érdekel a téma látogasd meg a jQuery hivatalos dokumentációs oldalát, és olvass tovább a PHP JSON lehetőségeiről.


jQuery, PHP jquery, json, php






Letöltések

Teszt fájlok jQuery JSON és PHP űrlap elemek feltöltéséhez
Input mezők feltöltése JQuery+JSON+PHP alapokon.


Hozzászólás beküldése:


http://domain.tld (nofollow)
 _  _  ____  ____   ____  ____  ____ 
( \/ )(_  _)(  _ \ ( ___)(  _ \( ___)
 )  (  _)(_  )(_) ) )__)  )   / )__) 
(_/\_)(____)(____/ (____)(_)\_)(____)



 
 
 
 
Powered By: PHP, Smarty, MySQL, CodeIgniter, jQuery, ArtH2O