Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak działa wysyłanie i odebranie żądania
Forum PHP.pl > Forum > XML, AJAX
webjasiek
Najpierw przedstawię pomysł, który chciałem osiągnąć.

Dwa pola:
  1. <div id="tlo1"><input type="text" id="a" onchange="this.style.backgroundColor='red'; ..."></div><div><input type="text" id="b" onchange="onchange="this.style.backgroundColor='red'; ..."></div>
Do każdego z pól (inputy) dodano zdarzenie onchange, które odpala skrypt w PHP, który to aktualizuje bazę danych o wpisaną wartość. Całość działa i baza danych się aktualizuje, ale chciałem uzyskać pewien EFEKT wizualny podczas wpisywania danych.
Otóż po zdarzeniu ochange na jednym z pól input jego tło staje się czerwone. Kiedy żądanie zwróci odpowiedź (XML), którą parsuję itd., wnętrze znacznika div - czyli właśnie mój input
ma 'zgasnąć' i ... gaśnie :-). Natomiast sam Div dostaje na stałe ramkę koloru czerwonego, aby było widać, że ta wartość została zmieniona. No więc nie chodzi o błąd działania. Tylko pojawił się problem,
jak działa ten AJAX bo:

Kiedy edytuję pierwsze pole i przeskoczę do drugiego, pierwsze robi się czerwone (żądanie poszło). Zmieniam drugie pole i wysyła się drugie żądanie zmiany - a więc i ten input staje się czerwony.
Zaznaczam, że pierwszy jeszcze nie wrócił, kiedy wysłałem ten. I teraz nagle wraca .... drugie żądanie i mój input staje się ponownie biały a zawierający go DIV staje się otoczony czerwoną ramką.
PIERWSZY jednak div nie zmienia ramki a jego input zostaje czerwony, tak, jakby to pierwsze żądanie nie doszło. Skrypt jednak się wykonał, bo OBIE wartości w bazie zostały zmienione.

Rozumiem, że można zebrać wartości we wszystkie pola i aktualizować CAŁOŚĆ jednym przyciskiem. Jednak skrypt ma działać tak jak opisałem.
I dodam, że kiedy poczekam, aż wróci pierwsze żądanie i dopiero zrobię zmianę w drugim polu, to oba się podświetlą jak trzeba. Nie ma więc błędów w skryptach tylko NIE bardzo rozumiem, dlaczego jedno żądanie jakby nie do końca wyświetliło się na ekranie (nie sparsował wyników, które dostał, bo wysłałem już drugie?) Proszę o wyjaśnienie dokładniejsze jak to działa i może poradę, czy da się tak zrobić, jak chcę.

Przepraszam za skomplikowany opis.
darko
Polecam zastosować dwa osobne (niezależne od siebie) obiekty XmlHttpRequest dla każdego inputa, wtedy każdy z nich będzie obsługiwany przez swój obiekt ajaxa i problem z głowy.
webjasiek
Acha, czyli problem jest tylko taki, że drugi input wprawdzie wykonuje skrypt, ale niejako "gubi" pierwszą odpowiedź i bierze sobie tylko ostatnią, jaką dostał?
Czyli jakbym chciał np. 5 równoczesnych zmian zrobić, to muszę powoływać obiektowe żądania (jako obiekty) ? - niezależnie od siebie - tak?
darko
Cytat
Acha, czyli problem jest tylko taki, że drugi input wprawdzie wykonuje skrypt, ale niejako "gubi" pierwszą odpowiedź i bierze sobie tylko ostatnią, jaką dostał?

Mniej więcej tak to wygląda.
Cytat
Czyli jakbym chciał np. 5 równoczesnych zmian zrobić, to muszę powoływać obiektowe żądania (jako obiekty) ? - niezależnie od siebie - tak?

Albo masz coś źle w kodzie, miałem na myśli sytuację, w której mamy np. 5 inputów i w każdym pięć różnych akcji dla onchange - wtedy najlepiej byłoby użyć pięcioelementowej tablicy żądań XmlHttpRequest po jednym dla każdego inputa, zobacz np. tutaj
webjasiek
Hm...
sorki, wszystko zadziałało jak : nie robiąc tablicy ani nic......
wpisasałem ... var ....

function ajax() {
var nowe = new XMLHttpRequest();

............

}

wcześniej miałem nowe = new ..... bez var :-)

i teraz wszystko działa ....
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.