Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywolanie Javascript po Ajaxie...
Forum PHP.pl > Forum > XML, AJAX
adamli
Witam
Mam probelm z wywolaniem funkcji JavaScript po zapytaniu Ajaxowym...
Musze przerobic stara wersje formularza na wersje ajaxowa...
Po submit formularz wywoluje sie sam z tym ze wtedy sprawdza poprawnosc
danych zapisanych w formularzu i jezeli jest blad wyswietla popup.
Niestety po zapytaniu Ajaxowym funkcje JavaScript nie dzialaja sad.gif
Podam latwy przyklad dla zrozumienia problemu:

Kod

<html>
    <head>
    </head>
    <body>
    
    <script type="text/javascript">
    
    function makeStandardPOSTRequest(url, parameters) {
      http_request = false;
      if (window.XMLHttpRequest) {
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) {
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      http_request.onreadystatechange = alertContents;
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
    }
    
    function alertContents() {
      if (http_request.readyState == 4) {
         if (http_request.status == 200) {
            result = http_request.responseText;
            document.getElementById('myDiv').innerHTML = result;  
         } else {
            alert('There was a problem with the request.');
         }
      }
    }
    
    function submitForm(){
        paramsString = "abc=1";
        makeStandardPOSTRequest('test.php',paramsString);
    }
    
    
    function checkResponse(value){
        if (value=="abc")
            alert("wartosc jest OK");
        else
            alert("wartosc nie jest OK");
    }
    
    </script>
    
    
    <?php
    
    echo "<div id =myDiv>";
    echo '<script type="text/javascript">alert("JavaScriptTestText");</script>';
    
    if (isset($_POST['abc'])) {
        echo '<script type="text/javascript">checkResponse('.$_POST['abc'].');</script>';
    }
    
    echo "<form name=\"mydirectselectionform\" id=\"mydirectselectionform\" method=\"POST\">";
    echo "<a href='javascript:submitForm()'>Submit</a>";
    
    echo "</form>";
    echo "</div>";
    ?>
    
    </body>
    </html>



Chodzi o to ze funkcja alert("JavaScriptTestText") jest wywolywana tylko raz (przy wczytaniu strony)
Niestety nie jest juz wywolywana po Submi'cie formularza sad.gif dlatego tez nie moge wywolac mojej
funcji JavaScript - checkResponse() ktora sprawdza poprawnosc danych i ewentualnie wyswietla popup.
Podany przyklad jest tylko przykladem i chodzi tylko o zrozumienie problemu wiec za uwagi ze moj
formularz nie ma zadnego input i tym podobne z gory dziekuje;)
Czy ktos potrafi mi pomoc?

Dziekuje
Adam
nospor
no tam gdzie masz linijke:
document.getElementById('myDiv').innerHTML = result;

musisz tez wywolac swoje checkResponse().

ps: dobra rada: uzyj jakiegos normalnego liba do js, np.jQuery. Reczna zabawa w czystym js z ajaxem to mordęga
adamli
Cytat(nospor @ 1.04.2009, 11:54:05 ) *
no tam gdzie masz linijke:
document.getElementById('myDiv').innerHTML = result;
musisz tez wywolac swoje checkResponse().


Wiem ze moge winksmiley.jpg ale nie o to chodzi... bo po submicie nie moge od razu wywolac funkcji JS
ktorej potrzebuje... bo po submicie wszystkie parametry przekazane przez POST sa
sprawdzane w kodzie PHP... dopiero po tym musze wywolac funkcje JS ktora generuje
mi popup ktory znowu laduje zupelnie inny URL...
nospor
no i ta linijka
document.getElementById('myDiv').innerHTML = result;
jest przeciez wykonywana po odebraniu danych przez ajaxa, wiec chyba o te wlasnie chwile ci chodzi smile.gif
zegarek84
o ile dobrze rozumiem chcesz odpalić nową przesłaną funkcję JS pobraną przez AJAX?? ... możesz ją uruchomić np. przez eval()... bądź poczytaj jeszcze o formacie JSON który jest naturalny dla js i pobranego z zewnątrz też możesz uruchomić przez eval bądź jeśli się obawiasz eval to możesz skożystać z parsera JSON....

zresztą możesz przesyłać dowolnie też paramatry i je ładować bez eval do istniejącej już funkcji której być nie przeładowywał a wywoływał po pobraniu danych i ta funkcja po odczycie danych zająć mogła by się odpowiednimi zdarzeniami...
adamli
Cytat(zegarek84 @ 1.04.2009, 13:03:12 ) *
o ile dobrze rozumiem chcesz odpalić nową przesłaną funkcję JS pobraną przez AJAX?? ... możesz ją uruchomić np. przez eval()... bądź poczytaj jeszcze o formacie JSON który jest naturalny dla js i pobranego z zewnątrz też możesz uruchomić przez eval bądź jeśli się obawiasz eval to możesz skożystać z parsera JSON....

zresztą możesz przesyłać dowolnie też paramatry i je ładować bez eval do istniejącej już funkcji której być nie przeładowywał a wywoływał po pobraniu danych i ta funkcja po odczycie danych zająć mogła by się odpowiednimi zdarzeniami...


nie nie chce wywolac nowej funkcji JS... W moim przykladzie jest to funkcja checkResponse ktora
istnieje i jest dostepna po zaladowaniu dokumentu ale przestaje byc widoczna po zatwierdzeniu
formularza przez ajaxowy-submit po ktorym musze ja wywolac...
nospor
no to ci napisalem przeciez jak masz to zrobic smile.gif
Cytat
no i ta linijka
document.getElementById('myDiv').innerHTML = result;
jest przeciez wykonywana po odebraniu danych przez ajaxa, wiec chyba o te wlasnie chwile ci chodzi
adamli
Ajax odbierze dane ok... ale w tym momencie nie wiem czy te dane sa poprawne...
Dlatego najpierw dane ktore sa przeslane przez POST musza byc sprawdzone przez PHP
(u mnie funkcja "checkResponse") dopiero zaleznie od wyniku tego sprawdzenia musze
wywolac jakastam funkcje JS...
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.