2011-07-28

[jQuery] Tablica z wynikami wyciągnięta za pomocą $.post

$.post umożliwia (oprócz zwykłych ciągów znaków) odebranie całej tablicy z danymi - bardzo fajna sprawa dzięki której dziś zrobiło mi się lżej na sercu. :) Żeby odebrać taki "array" a nie tylko "string" wystarczy po argumentach funkcji $.post dodać znacznik "json":

$.post("test.php", { "func": "getNameAndTime" },
function(data){
console.log(data.name); // John
console.log(data.time); // 2pm
}, "json");

W pliku test.php z którego pobieramy dane wystarczy zamiast zwykłego

echo "zwykly ciag znakow";
dać

echo json_encode(array("name"=>"John","time"=>"2pm"));

Żródło: http://api.jquery.com/jQuery.post/

2 komentarze:

  1. Niby wszystko OK, ale problem pojawia się gdy chcesz przesłać np. wynik pętli.
    Przykład:

    $zapytanie = mysql_query("select * from test_ajax ORDER BY wynik DESC LIMIT 5");
    while ($rekord = mysql_fetch_array($zapytanie)){
    $text = $rekord['id'].' - '.$rekord[imie];
    }

    echo json_encode(array("jakas_wartosc"=>$text));

    json wyśle tylko wynik ostatniego przebiegu pętli.

    OdpowiedzUsuń
  2. Dodam również, że utworzenie z $text tablicy tj. $text[], nie rozwiązuje problemu.
    Przykład:

    $zapytanie = mysql_query("select * from test_ajax ORDER BY wynik DESC LIMIT 5");
    $text = array();
    while ($rekord = mysql_fetch_array($zapytanie)){
    $text[] = $rekord['id'].' - '.$rekord[imie];
    }

    echo json_encode(array("jakas_wartosc"=>$text));

    W taki przypadku występuje błąd w pliku z biblioteką jQuery.

    OdpowiedzUsuń