Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak to wykonać w ajax
Forum PHP.pl > Forum > XML, AJAX
morrison
witam,

Przerabiam pewna aplikacje na ajax i dopiero zaczynam sie tego uczyc. Nie jestem pewny jak najprosciej i najlatwiej przetwarzac dane w ajax.
Najlepiej byloby zebym robiac najmniej modyfikacji w kodzie mogl przerobic wszystko na ajax. Mam pytanie, jak wykonac mechanizm tego typu w ajax:

  1. <form name="form_data" onsubmit="return valid_data();" method="post" action="talk_time_all.php">
  2. <table align="center">
  3.  <tr><td align="left"><div class="textkontakt">Format:</td><td>rrrr-mm-dd gg:mm:ss</div></td></tr>
  4.  <tr><td align="left"><div class="textkontakt">data od:</div></td>
  5. <td>
  6. <input type="text" size="19" id="name" value ="<?php
  7. $today = date("Y-m-d, H:i");
  8. $print_date = substr($today, 0, 10);
  9. echo $print_date; ?> 00:00:01" class="kolorpol" maxlength="19" name="date_od" />
  10. </td>
  11.  </tr>
  12.  <tr><td align="left"><div class="textkontakt">data do:</div></td>
  13. <td>
  14. <input type="text" size="19" id="name" value ="<?php 
  15. $print_time = substr($today, 12, 5);
  16. echo $print_date." ".$print_time; ?>:00"
  17. class="kolorpol" maxlength="19" name="date_do" /></td>
  18.  </tr>
  19.  <tr><td></td>
  20. <td><br />
  21.  <input class="przeslij" type="submit" value="Akceptuj" />
  22.  <input name="mode_1" type="hidden" value="search_1" />
  23. </td>
  24.  </tr>
  25. </table>
  26. </form>
  27. <?php
  28. //jezeli wyslano pierwszy formularz,wowczas wejdz do petli
  29. if (@$_POST['mode_1'] == 'search_1'){
  30. $date_od = $_POST['date_od']; //podstawia date z formularza
  31. $date_do = $_POST['date_do'];
  32.  
  33. //zapytanie wybierajace wszystkie roznorodne nazwy portfolio z okreslonego przedzi
    alu czasu dla ktorych 
  34. //byla prowadzona rozmowa
  35. $result = mssql_query("select distinct callbase from eis_eventlog where datimestamp >= '".$date_od."'
  36. and datimestamp <= '".$date_do."' and callbase <> '' and oldstate = '9' order by callbase");
  37.  
  38. $value_rows = rows_affected(); //obliczenie ilosci zwroconych rekordow
  39.  
  40.  
  41. // przegladamy wyniki zapytania wiersz po wierszu
  42. // wrzucajac dane do tymczasowej tablicy
  43. $tablica_wyniki[0] = 0;  //deklaracja tablicy na wypadek gdyby zapytanie nie zwrocilo wynikow
  44. $i = 0;
  45. while ($portfolio = mssql_fetch_row($result)) {
  46. $tablica_wyniki[$i] = $portfolio[0];
  47. ++$i;
  48. }


Chodzi mi przede wszystkim o to jak zrobic w ajax zeby odebrac dane podane w formularzu i wyslac je do tego samego skryptu PHP, a potem sprawdzic czy te dane zostaly wyslane no i jesli tak to zeby dzialanie skryptu przeszlo w odpowiednie miejsce, zeby wykonac zapytanie do bazy. W tym momencie mam to zrobione tak ze wysylam w formularzy pole <input name="mode_1" type="hidden" value="search_1" /> a potem gdy istnieje taka dana to wykonuje sie odpowiedni fragment kodu. Ktos moze pomoc?
tommy4
Nie potrafię wczuć się w ten problem, ale musisz po prostu wiedzieć, że AJAX to zwykłe wywoływanie stron, jednak tak jakby niewidoczne dla przeglądającego.

No więc możesz wysłać dane post i potem z tego samego linku odebrać jakieś dane.

Te dane potem podmieniasz na stronie za pomocą innerHTML czy tam czegokolwiek chcesz. Nie ma tu wyższej filozofii.

Pytasz jak pobrać dane z formularza.

AJAX to zwykły JavaScript, także po prostu:

var text = document.getElementById("pole_tekstowe").value;

jeśli chcesz przesyłać przez get to używasz encodeURIComponent, jeśli przez post to ci nie pomogę, bo nie próbowałem. tongue.gif

http://developer.mozilla.org/en/docs/AJAX:Getting_Started

Poczytaj to, strasznie się przydaje.

Więc dajmy na to gość wpisał w polu tekstowym swoje imie i nazwisko.

[Jaś Fasola]

podczas kliknięcia na button, czy co tam chcesz, wywołujesz funkcję, która wysyła to imię np.

getURL("plik.php?name=" + encodeURIComponent(document.getElementById('pole_tekstowe').value));

No i potem w pliku.php obrabiasz te dane, wsadzasz do bazy i tak dalej. Jeśli się udało, to np. zwracasz tekst:

ok <id> <imie_nazwisko>

jeśli nie to:

error <blad>

No i potem znowu obrabiasz przez javascript i walisz na stronę poprzez podmianę divów (innerHTML) czy cokolwiek.

Powodzenia, i zawsze myśl, że nic nie jest trudne, tylko tak wygląda. smile.gif

Przeczytaj to na mozilli, bo bardzo pomaga.
bartek00
Witam

Na poczatek jesli zaczynasz zabawe z AJAX to sprobuj wykorzystac jakas gotowa biblioteke. Ja osobiscie polecam prototype. Jesli chodzi o problem, ktory przedstawiles to proponuje nastepujace rozwiazanie.

Po pierwsze kazdy formularz oddziel do osobnego pliku. Tak aby byl jakis div w nim form i tyle. Nastepnie na stronie gdzie ma sie wyswietlac formularz wstaw kolejnego div nazwij sobie go np. form_area. Plik z formularzem mozesz poprostu includowac. Teraz musisz zrobic na formularzu jakas akcje podczas submitowania. Proponuje wykorzystac Ajax.Updater z prototype. Wywolac go onsubmit. Robi on tyle ze do elementu html o podanym id wstawia to co mu zwroci adres, ktory mu przekazemy. W naszym przypadku bedzie to adres pliku, ktory ma sprawdzic poprawnosc danych formularza. Jesli walidacja sie nie powiodla to wyswietlamy ponownie formularz. Wtedy Ajax.Updater wstawi go w to samo miejsce czyli zrobi innerHtml na form_area. Mozna w ten sposob wyswietlac automatycznie bledy. Jesli walidacja sie powiedzie mozna wyswietlic inny widok, np. komunikat potwierdzajacy udana akcje.

Pozdrawiam
morrison
dzieki Chlopaki, pomogliscie. zrobilem to poprzez advAJAX. teraz mam kolejne pytanie, wczesniej mi dzialala funkcja napisana w JS, ktora walidowala poprawnosc danych wpisanych do formularza - jesli byly nie poprawne to nie dalo sie wyslac formularza, teraz moj formularz wyglada tak:


  1. <form name="form_data" id="form_talk_time_all" onsubmit="return valid_data();" method="post" action="talk_time_all.php">
  2. <table align="center">
  3. <tr><td align="left"><div class="textkontakt">Format:</td><td>rrrr-mm-dd gg:mm:ss</div></td></tr>
  4. <tr><td align="left"><div class="textkontakt">data od:</div></td>
  5. <td>
  6. <input type="text" size="19" id="date_od" value ="<?php
  7. $today = date("Y-m-d, H:i");
  8. $print_date = substr($today, 0, 10);
  9. echo $print_date; ?> 00:00:01" class="kolorpol" maxlength="19" name="date_od" />
  10. </td>
  11. </tr>
  12. <tr><td align="left"><div class="textkontakt">data do:</div></td>
  13. <td>
  14. <input type="text" size="19" id="date_do" value ="<?php
  15. $print_time = substr($today, 12, 5);
  16. echo $print_date." ".$print_time; ?>:00"
  17. class="kolorpol" maxlength="19" name="date_do" /></td>
  18. </tr>
  19. <tr><td></td>
  20. <td><br />
  21. <input name="mode_1" type="hidden" value="search_1" />
  22. <input class="przeslij" type="submit" value="Akceptuj" onClick="assign_form('form_talk_time_all')" />
  23. </td>
  24. </tr>
  25. </table>
  26. </form>


no i wlasnie to: onsubmit="return valid_data();" obsluguje walidacje formularza, rozumiem, ze trzeba jakos zmodyfikowac wywolanie tej funkcji pod ajax, tylko jak? chce zeby nie wysylal sie formularz jesli dane w polach nie spelniaja wymagan funkcji valid_data()
my_kel
No ale moment albo na przycisku masz submit i onclick i dalej f-cja ktora robi validacje, a jesli sie udala to inicjowana jest akcja ajax'a albo masz onsubmit a przycisk to zwykly <input type="image".... /> i return zwraca Ci false jesli validacja sie nie powiodla, albo true i wykonuje sie f-cja ajax'owa.
Pozdr.
MS
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.