jQuery in PHP - veliko podatkov

Pozdravljeni!

Trenutno eksperimentiram z uporabo jQuery in PHP in prenosom podatkov med njima.
Uspe mi preko funkcije $.ajax v jQuery klicat php datoteko in preko nje vrniti neko navadno besedilo.


sestavi.js

var id = $(this).attr("id");
var dataString = 'id='+ id;

 $.ajax
({
type: "POST",
url: "/ajax/sestavi-ajax.php",
data: dataString,
cache: false,
success: function(html)
{
$(".podatki").fadeIn();
$(".podatki").html(html);
}
});

sestavi-ajax.php

$id_kategorije = $_POST["id"];;

    $category = new Category($id_kategorije, intval($cookie->id_lang));
    $category->name = Category::hideCategoryPosition($category->name);

    echo $category->name;

Zadeva pravilno vrne ime kategorije.
Problem nastane ko bi jaz rad nazaj vrnil kakšne bolj kompleksne podatke kot so zapleteni arrayi, več spremenljivk, itd..

Kateri način je najbolj učinkovit način da iz PHP datoteke v sestavi.js pošljem kompleksne podatke in jih prikažem?

6 odgovorov

Pri klicu dodaj še:
dataType: "xml/html/script/json",

Najlažje je uporabljat JSON. V PHPju zgradiš array s podatki potem pa ga izpišeš takole:
echo json_encode($array);

v JS potem kličeš podatke tako: html.podatek

4

Super SpinX!

Kaj pa če imam več arrayev.. Vsakega posebej dam echo json_encode ?
Kako pa bi lahko v JS klical samo določene spremenljivke iz PHP. Recimo $category->name.
Če bi hotel samo to prikazano. Trenutno mi deluje tako, da mi izpiše vse kar vrne PHP datoteka.
Recimo spremenljivka $category->name se mora prikazati v divu .kategorija , neka druga spremenljivka pa drugje.

kaj pa ce bi php file klical v dummy iframe-u in potme lahko dolocis, kaj se kje prikaze..
recimo $('#kategorija', window.parent.document).html('bla bla');

Recimo, da iz PHP vrneš objekt:

o={
    "name": "Ime",
    "title": "Naslov"
}

...potem lahko klic in pa response handler izgledata takole:

$.getJSON('ajax/test.php', function(data) {
    $('h1.name').html(data.name);
    $('h2.title').html(data.title);
});

...in tako naprej.

1

definitivno json,

če imaš veliko kb podatkov ki se pretakajo, vključi še gzip kompresijo in bo zadeva občutno hitrejša, saj se plain text dobro kompresira

Sej mogoče v določenih primerih, je tudi vračanje HTML fragmentov smisleno.

Primer:
Imamo seznam podatkov in pager. Najprej naredimo "klasično" pageanje, preko GET parametra. Potem pa v view dodamo preverjanje če je request prišel preko AJAX-a, in v tem primeru vrnemo samo HTML fragment, seznam in pager. Potem pa na linke pagerja, bindamo AJAX request, da pač pokliče nek view, in zamenjamo vsebino. Zelo enostavno. Treba je le paziti, in ob vsakem klicu, rebind-at linke pagerja.

Poleg tega, da je enostavno, pa pridobimo še to, da če user prehitro klikne pager, preden se naloži JS, ali pa ima celo izklopljen JS, stvar deluje.

Če se potem še pohecamo z kakimi anchor-ji, lahko še naredimo, da tudi če user refresha stran, se vseeno pravilno page-a.

Stvar se edino lahko zakomplicira, če imamo v seznamu elemente, na katere bind-amo še kakšne dodatne stvari, potem je treba še zato poskrbet.

Če pa imamo samo enostaven seznam in pager, pa mislim da je smiselno vračati HTML fragmente.