Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: asynchroniczne pobieranie danych z formularza
Forum PHP.pl > Forum > XML, AJAX
qbas-s
Witam,
nie wiem jak rozwiązać nast problem:
Mam sobie pewien formularza a w nim textbox'y o jakiś nazwach i identyfikatorach. Chciałbym aby po naciśnięciu buttona dane te zostały asynchronicznie pobrane( bardzo mi zależy na tym aby strona się nie przeładowywała). Potem dane mają być przekazane do skryptu php gdzie są analizowane i filtrowane a nast zależnie od wyniku wyświetlany odpowiedni komunikat przy formularzu. Wszystko ma być asynchroniczne.
Próbowałem już zrobić plik php a w nim skrypt do sprawdzania tego form. Na stronie formularza wczytywałem go poprzez AJAX'a ale też nie działa.
Jeśli zrobię to poprzez <form action="blablabla" method="post"> i w skrypcie php naskrobie co należy do obsługi tego to oczywiści działa ale mija się jednocześnie z moim założeniem.

Proszę o pomoc
erix
Cytat
Na stronie formularza wczytywałem go poprzez AJAX'a ale też nie działa.

Pokaż, jak go wczytywałeś.
qbas-s
Kod
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest)
{
    XMLHttpRequestObject = new XMLHttpRequest();
}else if (window.ActiveXObject)
{
    XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function getData(dataSource, divID)
{
    if(XMLHttpRequestObject)
    {
        var obj = document.getElementById(divID);
        XMLHttpRequestObject.open("GET", dataSource);
      XMLHttpRequestObject.onreadystatechange = function ()
      {
        if (XMLHttpRequestObject.readyState == 4 &&
        XMLHttpRequestObject.status == 200)
        {
            obj.innerHTML = XMLHttpRequestObject.responseText;
        }
      }
      XMLHttpRequestObject.send(null);
    }
}




a potem w formularzu(oczywiście ten powyższy kod jest includowany wcześniej):
  1. <input type="button" onclick="getData('skrypt.php','jakisDIV')" />
erix
A konsola błędów?
qbas-s
konsola nic nie krzyczy.
w skrypt.php mam do testowania coś takiego(testuje jeden textbox o name="test"):

if($test !="") echo'ok'; else echo':(';

oczywiście w textbox zawsze coś wpisuje
erix
Ale przecież nie masz żadnej wysyłki formularza...

Poza tym, w skrypcie sprawdzającym korzystasz ze zmiennych tworzonych przez register_globals, które są zaniechane.

Zerknij, co masz w tablicy $_POST.
qbas-s
Właśnie nie wiem jak dokonać analizy formularza nie używając submit'a jednocześnie eliminująć przeładowanie strony
wookieb
Dodajesz do niego zdarzenie onsubmit
Kod
<form method="post" action="..." onsubmit="return funkcja_ajax()">


Kod
funkcja_ajax()
{
//tutaj robisz sobie cos ajaxem badz sprawdzasz poprawnosc formularza.
// jak zwrocisz true zezwolisz na wysłanie formularza z przeładowaniem strony.
return false;
}
qbas-s
używając powyższej funkcji funkcja_ajaxa() wczytuje asynchronicznie plik php który ma sprawdzać formularz. Jak teraz pobrać za pomocą tego tego wczytanego skryptu dane wstukane do textboxów?
wookieb
tak samo jak sie odczytuje dane z pol formularza.
zobacz sobie tablice
Kod
document.forms[nazwa_formularza].elements

Badz poprostu odwoluje sie do pol po id. A tego to ucza w kazdym kursie js.
qbas-s
wiem jak z poziomu js to zrobić. jak to zrobić za pomocą php, bo przecież nie wysyłam danych poprzez formularz więc chyba metoda get lub post nie działa?
może pokaże istotny kod tego co chce zrobić. Do obsługi używam 3 plików:
rejestracja.php - czyli formularz rejestracyjny
modify.js - asynchroniczne pobierania zawartości plików
check_form_signup.php - prawie nic tam jeszcze nie ma ale ma za zadanie sprawdzić ten formularz

rejestracja.php
  1. <?php
  2. <script type="text/javascript" src="js/modify.js"></script>
  3. <form action="..." method="post" onsubmit="return getData2('logic/check_form_signup.php','test')">
  4. <span id=form_input>
  5.    <p>FORMULARZ REJESTRACYJNY
  6.    <p><input type=text maxlength=70 name=login><br/>
  7.    <p><input type=text maxlength=70><br/>
  8.    <p><input type=password maxlength=70><br/>
  9.    <p><input type=password maxlength=70><br/>
  10.    <p><img src="php/obrazek.php" class=img_pass>
  11.        <input type=text class=img_inp_pass><br />
  12.    
  13. </span>
  14. <span id=form_su_text>
  15.    
  16.    <p>Login<br><br>
  17.    E-mail<br><br>
  18.    HasĹ&#8218;o<br><br>
  19.    Powtorz hasĹ&#8218;o<br /><br />
  20.    Kod z obrazka
  21.    
  22. </span>
  23. <span id=accept_reg>
  24.    <p><input type=checkbox>.--- AkceptujÄ&#8482; <a href="">regulamin</a>|<a href="">politykÄ™ prywatnoĹ›ci</a></p>
  25. </span>
  26. <span id=accept_reg_bt>
  27.    <p><input type=submit value=Rejestruj></p>
  28. </span>
  29. </form>
  30. ?>




modify.js
------------------------
function getData2(dataSource, divID)
{
if(XMLHttpRequestObject)
{
var obj = document.getElementById(divID);
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange = function ()
{
if (XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200)
{
obj.innerHTML = XMLHttpRequestObject.responseText;
}
}
XMLHttpRequestObject.send(null);
}
return false;
}



check_form_signup.php
----------------------------
  1. <?php
  2.  
  3.          
  4.  if($login != "") echo'skrypt działa'; else
  5.  echo'skrypt nie działa';
  6.  
  7. ?>
Fishu
chyba brakuje objektu o id "test" smile.gif
I jeszcze coś, jeżeli chcesz np. odbierać dane w php za pomocą metody GET to dodaj to do wywołanego pliku w js.
Tzn. zamiast
  1. XMLHttpRequestObject.open("GET", dataSource);

Daj:
  1. XMLHttpRequestObject.open("GET", dataSource + "?login=abc");
qbas-s
zapomniałem - obiekt o id="test" był i jest tylko że w index.php:)
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.