Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ajax][js]problem ze zwracaniem
kapke
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


no cóż, mam sobie taką oto klasę:
CODE
[JAVASCRIPT] pobierz, plaintext
  1. function ajaks () {
  2. this.tekst = 'a';
  3. var request = false;
  4. request = new XMLHttpRequest(); //tworzymy obiekt XMLHttpRequest
  5. this.insertData = function (zrodlo, cel) {
  6. var cel = document.getElementById(cel);
  7. request.open("GET", zrodlo, true);
  8. request.onreadystatechange = function () {
  9. if (request.readyState == 4) { //jeśli to, co było zarządane: źródło,
  10. cel.innerHTML = request.responseText; //to wstawiamy to to w cel
  11. }
  12. }
  13. request.send(null); //nic nie wysyłamy
  14. }
  15. this.getData = function (zrodlo) {
  16. request.tekst = 'b';
  17. request.open("GET", zrodlo, true);
  18. request.onreadystatechange = function () {
  19. if (request.readyState == 4) {
  20. this.tekst = request.responseText; //1
  21. }
  22. }
  23. request.send(null);
  24. return this.tekst; //2
  25. }
  26. }
[JAVASCRIPT] pobierz, plaintext

i problem jest taki, że w momencie 1 (metoda getData) pole tekst ma taką wartość, jakiej oczekuję: zawartość pliku, lecz, gdy już chcę zwrócić tą wartość w celu późniejszego wykorzystania, otrzymuję 'a', a nie zawartość pliku. Ktoś wie, jak sobie z tym poradzić/czemu to nie działa tak, jak ja chcę?
P.S. metoda insertData działa dokładnie tak jak oczekuję: wstawia zawartość pliku do diva, czego tylko zechcę
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
kamil4u
post
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Gdyż this ma w tym momencie inną wartość...
Skorzystaj z: apply - https://developer.mozilla.org/en/JavaScript.../Function/Apply
Lub prościej:
Kod
that = this; //<---
this.getData = function (zrodlo) {
request.tekst = 'b';
request.open("GET", zrodlo, true);
request.onreadystatechange = function () {
if (request.readyState == 4) {
that.tekst = request.responseText; //1  //<---
}
}
request.send(null);
return this.tekst; //2


Ten post edytował kamil4u 1.10.2010, 12:33:01


--------------------
Go to the top of the page
+Quote Post
kapke
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


CODE
[JAVASCRIPT] pobierz, plaintext
  1. that = this;
  2. this.tekst = 'a'
  3. this.getData = function (zrodlo) {
  4. request.open("GET", zrodlo, true);
  5. request.onreadystatechange = function () {
  6. if (request.readyState == 4) {
  7. that.tekst = request.responseText;
  8. alert(that.tekst);
  9. }
  10. }
  11. request.send(null);
  12. return this.tekst;
  13. }
[JAVASCRIPT] pobierz, plaintext

kod, który dałeś, nie działa... tzn, działa, ale nie tak jak powinien...
co ciekawe: zwrócone jest a, ale alert wyświetla dokładnie, to co mnie interesuje...
no cóż, zrobiłem to tak, że stworzyłem diva z display: none, i tam ląduje zawartość interesującego mnie pliku, choć nie jest toto rozwiązanie, które mnie satysfakcjonuje
Go to the top of the page
+Quote Post
#luq
post
Post #4





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Bo nie rozumiesz idei asynchroniczności...

Masz metodę getData w której jest wysłany request przez ajax`a i zdefiniowana jest funkcja wykonywana przy zdarzeniu readyStateChange, która dopiero z przypadku dostania odpowiedzi zmienia this.tekst, oczywiście zdarzenie jest wykonywane swoim tokiem, bo funkcja wykonywana podczas wystąpienie tego zdarzenia jest jedynie w tym miejscu zdefiniowana a nie wykonana a więc w czasie dojścia do lini 12:

Kod
return this.tekst;


this.tekst nie ma możliwości właściwie (teoretycznie jest jeśli zapytanie zostało wysłane i odebrane w setnych częściach sekundy) przybrać stan tego jaki ma zostać przypisany do niego z ajax`owego requesta.

W sumie requestów synchronicznych nigdy nie wykonywałem ale powinno pomóc winksmiley.jpg

Ten post edytował #luq 1.10.2010, 22:35:41


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
kapke
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


ok, dzięki wielkie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:37