Komentarze w AJAX
Czyli komentarze „takie jak na youtubie” HTML i CSS
Zaczynamy standardowo od utworzenia jakiegoś prostego formularza na stronie, na której będziemy dodawać i wyświetlać komentarze.<form name="ajaxForm" id="ajaxForm" method="post" action="" onsubmit="postForm();return false;"> <label for="yourName">Imię</label> <input type="text" name="yourName" id="yourName" /> <br /> <label for="yourAge">Wiek</label> <input type="text" name="yourAge" id="yourAge" /> <br /> <label for="yourMail">Email</label> <input type="text" name="yourMail" id="yourMail" /> <br /> <label for="yourComment">Komentarz</label> <textarea name="yourComment" id="yourComment"></textarea> <label for="submitForm"> </label> <input type="submit" id="submitForm" value="Submit" /> <input type="hidden" name="formPosted" value="true" /> </form> <div id="loading" style="display: none;"> <img src="loader.gif" /> </div> <div id="comments"> <!-- tutaj będą "wrzucane" komentarze" --> </div>
<style type="text/css"> .comment { border:solid 2px black;width:300px;background-color:#e0e0e0;padding:10px;font-family:Arial;margin:15px; } </style>
jQuery
Skrypt zajmujący się przekazaniem danych z formularza do serwera oraz pobraniem i wyświetleniem odpowiedzi napisany będzie w jQuery. Jeśli jeszcze nie ściągnąłeś jQuery, teraz będzie dobry moment by to zrobićfunction postForm() { $("#loading").show("fast"); $.post("index.php", $("#ajaxForm").serialize(), function(data) { $("#loading").hide("fast"); $("#comments").append( '<div class="comment"><div><strong>'+data.name+'</strong>'+ '('+data.email+') - '+data.age+' lata'+ '<div>'+data.comment+'</div>'+ '</div></div>' ); }, "json"); }
$("#loading").show("fast");
JSON (JavaScript Object Notation) jest formatem danych, pozwalającym nam traktować grupę danych, jako jeden obiekt. Jest to coś w stylu wielowymiarowej tablicy w PHP. Aby odnieść się do danych zapisanych w takim obiekcie używamy po prostu kropki (np. jsonObject.imie, jsonObject.wiek itd.).
Jeszcze szybki rzut oka, jak działa funkcja wykonująca się po otrzymaniu odpowiedzi od serwera (trzeci argument podany do $.post):
function(data) { $("#loading").hide("fast"); $("#comments").append( '<div class="comment"><div><strong>'+data.name+'</strong>'+ '('+data.email+') - '+data.age+' lata'+ '<div>'+data.comment+'</div>'+ '</div></div>' ); }
Funkcja append() jest funkcją jQuery, która dołącza kod HTML do elementu na rzecz którego została wywołana. Więcej na jej temat znajdziesz w dokumentacji.
PHP & MySQL
Jedyne co nam zostało to obsługa danych wysłanych z formularza po stronie serwera. Co musimy zrobić? Przede wszystkim trzeba te dane odebrać, następnie wykonać zapytanie umieszczające je w bazie danych a na końcu przekazać je do przeglądarki. Zatem zanim się do tego zabierzemy, trzeba w ogóle mieć jakąś bazę danych. Zakładam, że zapytanie tworzące tabele każdy potrafi sobie ułożyć samemu, a jeśli nie to można użyć phpMyAdmin. W naszej przykładowej bazie danych mamy tabelę o nazwie „comments”, a w niej pola: - id (to będzie oznaczone jako auto_increment) - name (imię / nick dodającego komentarz) - age - email - comment Mając utworzoną tabelę, przystępujemy do pisania skrytpu:mysql_connect('localhost', 'root', ''); mysql_select_db('comments'); if(isset($_POST['formPosted'])) { $returnData['name'] = $_POST['yourName']; $returnData['age'] = $_POST['yourAge']; $returnData['email'] = $_POST['yourMail']; $returnData['comment'] = $_POST['yourComment']; $query = "INSERT INTO comments VALUES('', '".$returnData['name']."','".$returnData['age']."','".$returnData['email']."','".$returnData['comment']."')"; mysql_query($query); echo json_encode($returnData); exit; }
string json_encode (mixed$value [, int $options = 0])
Funkcja ta przyjmuje jako parametr zmienną i zwraca ją w postaci zakodowanej do JSON. Przykładowo:
Ot, cała filozofia
Więcej, jak zwykle w manualu.
No i to wszystko! Od teraz możemy się już cieszyć działającym i zarazem efektownym systemem komentarzy.
Dziękuję za uwagę $myArray = array("a"=>1, "b"=>2, "c"=>3, "d"=>4); echo json_encode($myArray); // wyświetli: {"a":1,"b":2","c":3,"d":4}
Wprowadzenie Eleganckie formularze na stronie WWW
Wystarczy zastąpić funkcję append funkcją prepend,czyli:
$(„#comments”).prepend(
// tutaj wszystko tak samo jak w kodzie powyżej
);