Oczekiwanie na wyniki z pliku php


(kod) #1

Witajcie,

Czy ktoś mnie może oświecić w jaki sposób mogę zrobić oczekiwanie na pełne wyniki z pliku php, załadowanego z .load() jquery, a później wykorzystanie tych danych w dalszej weryfikacji przez js?

Oto schemat tego co nadumałem: 

spr () {

  //pobieranie wartosci do warunkuow

  if (warunek) {

    return false;

  }else if (warunek) {

    return false;

  }

  ...

  } else {

    //uformowanie koncówki GET do przekazania wartości dla warunków w pliku php, do postaci php?.....

    $("id").load(plik_php_z_GET,function(){

        //sprawdzanie czy obiekty span pojawiły się jak nie to false

        //pobieranie danych z obiektów span

        //noi warunek zwaracający true albo false

    });

  }

}

Problem w tym że po wywołaniu funkcji spr() to z funkcji w load nie zdąży wyjść wynik - podczas sprawdzania w console.log pierwsze był false, potem posty console.log z funkcji w load. Przy drugim odpaleniu w konsoli spr(), zwraca oczekiwany wynik. spr jest sprawdzeniem wartości w polach formularza na stronie. W pliku php jest zwykłe wywołanie mysql SELECT ( na podstawie tego przykładu http://www.w3schools.com/php/php_mysql_select.asp ), a potem wypisanie przy pomocy echo tego co mnie interesuje do a potem na podstawie tego jest właśnie warunek true albo false. Próbowałem setinterval w pętli do-while żeby po zapętleniu warunku sprawdzało jeszcze raz, ale to nie działa, albo ja coś namieszałem. Próbowałem tworzyć przed load zmienną, żeby potem w load ustawić jej stan, a potem na podstawie wartości tej zmiennej ustawiać true, albo false. Próbowałem też wstawić cały load do if, ale wartość true pochodziła według mnie z faktu że load z powodzeniem załadowało plik, a nie wartość którą nadały warunki w środku. Moje łopatologiczne starania nie wyszły. Byłby ktoś tak miły i mnie naprowadzić jak to zrobić?


(angh) #2

Chyba twoim problemem jest to, ze .load jest asynchroniczny. Load jest wywolany rownologle, ale kod kontynuuje wykonywanie, nie czkajac na wynik. To jest porzadane zachowanie. Uzyj dokumentacji, gdzie masz opisane, ze mozesz spokojnie wrzucic tam callback function.
http://api.jquery.com/load/
.load( url [, data ] [, complete ] )
gdzie complete to callback function, wywolywana po zakonczeniu request.

complete
Type: Function( String responseText, String textStatus, jqXHR jqXHR )
A callback function that is executed when the request completes.

// jakos tutaj zablokuj ekran -> $("#loading").show();
.load(“link_do_URI”, null, “mojaFunkcjaSprawdzajaca”)

mojaFunkcjaSprawdzajaca: function(response, status){
// jakos tutaj odblokuj ekran
if (response === 200)
-> wszystko w porzadku
if response === 404
-> cos nei dziala
// jakikolwiek kod tutaj do wyswietlenia/wywolania innych funkcji czy cokolwiek
}

Jezeli zle to zrozumialem, daj znac.