Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX JSON] $.getJSON problem z IE8
suny79
post 28.08.2010, 20:07:13
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 9.03.2010

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


Witam, robię proste zapytanie do bazy danych poprzez Json GET, działa w FF, Operze, Chromie, ale nie chce w IE8 sad.gif


var noCache = Date();
get_query='strona='+strona + '&noCache=' + noCache;
$.getJSON("index-ajax.php", get_query, processResponse);


function processResponse (data, status) {


//Tutak w ogole nie chce wejść...tak jakby przeglądarka w ogole nie wysyłała requestu do serwera.

}

Jak Wy robicie JSON geta, który działa w IE?

Dzięki za pomoc.
Włodek.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
sebekzosw
post 28.08.2010, 20:17:55
Post #2





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


ja osobiście robię to tak:

  1. $.ajax({
  2. url: "file.php",
  3. dataType: 'json',
  4. data: ({'zm1': val1, 'zm2' : val2}),
  5.  
  6. beforeSend: function()
  7. {
  8. //przed wysłaniem danych
  9. },
  10. success: function(data)
  11. {
  12. //komunikat po poprawnym pobraniu danych
  13. },
  14. error: function()
  15. {
  16. //komunikat wyskakujacy, jak nie mozna pobrac danych
  17. },
  18. complete: function()
  19. {
  20. //komunikat wyskakujacy za kazdym razem nie zaleznie czy sie cos uda czy nie
  21. }
  22. });
Go to the top of the page
+Quote Post
everth
post 28.08.2010, 20:51:28
Post #3





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


bbCode - ułatwia życie. A kod robimy po bożemu (czyli C&P z dokumentacji jQuery winksmiley.jpg):
[JAVASCRIPT] pobierz, plaintext
  1. var noCache = Date();
  2. get_query='strona='+strona + '&noCache=' + noCache;
  3. $.getJSON("index-ajax.php", get_query, function(data,textStatus) {processResponse(data,textStatus);}) //możesz callbacka spróbować wywołać bezpośrednio, ja z przyzwyczajenia wszystko owijam w funkcje
  4.  
  5. function processResponse (data, textStatus) {
  6. //Tutak w ogole nie chce wejść...tak jakby przeglądarka w ogole nie wysyłała requestu do serwera.
  7. }
[JAVASCRIPT] pobierz, plaintext


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
suny79
post 28.08.2010, 21:38:08
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 9.03.2010

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


Niestety nie pomogło z tą funkcją.


Czy znacie jakieś metody, narzędzia do testowania AJAX GET?
Go to the top of the page
+Quote Post
everth
post 28.08.2010, 21:52:46
Post #5





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Hmm, może coś ci pieprzy w danych które przekazujesz, zobacz jak będzie z tą linią:
[JAVASCRIPT] pobierz, plaintext
  1. get_query= { 'strona':strona, 'noCache':noCache };
[JAVASCRIPT] pobierz, plaintext


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
suny79
post 28.08.2010, 23:45:17
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 9.03.2010

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


Przerobiłem getJSON na ajaxa:

$.ajax({
url: url,
dataType: 'json',
data: ({'strona': strona}),
success: callback
});


Po stronie PHP nic nie zmienialem i dostalem blad, ze fcja dostaje tablice, zamiast stringa. No to zmienilem $_GET[] na $_GET[][0] (?) i znowu w FF dziala, a w IE nie....masakra jakaś...:(

Czy to jest poprawne? IE na pewno wysyła dane, bo dostawałem błędy serwera, na pewno też coś przychodzi, bo FF ładnie podmienia rekordy z bazy, ale IE nie chce, co dalej, jakieś debugi są w IE8? Dla mnie to porażkowa przeglądarka na całej linii...

PS nie widze JS w bbcode, dlatego nie formatuje.

Zainstalowałem wiresharka, żeby się upewnić, że IE wysyła zapytanie do serwera, tak samo jak FF. Okazało się, że tak się dzieje, po czym przychodzi odpowiedz w postaci HTTP 200OK, więc wszystko po stronie PHP jest OK. Jedynie IE nie potrafi obsłużyć odpowiedzi jaką dostaje.

Moje więc pytania:

1) czy dobrze koduje odpowiedź serwera:

  1. header('Content-Type: application/json; charset=utf8');
  2. header("Cache-Control: no-cache, must-revalidate");
  3. header("Expires: 0");
  4.  
  5.  
  6. echo json_encode (
  7.  
  8.  
  9. "message_ids_table" => $message_ids_table,
  10. "message_random_table" => $message_random_table,
  11. "temat_table" => $temat_table,
  12. "message_table" => $message_table,
  13. "data_spotkania_table" => $data_spotkania_table,
  14. "data_dodania_table" => $data_dodania_table,
  15. "activity2_table" => $activity2_table
  16.  
  17. )
  18. );


2) czy dobrze dekoduje dane po stronie JS, tzn odwołując się wprost przez indeksy tablic?


message_ids_table[0]
message_ids_table[1]
...

Odczytany string odpowiedzi z pakietu HTTP (wireshark):

{"message_ids_table":["208","207","206","205","204"],"message_random_table":["118","117","116","115","114"],"temat_table":["Temat 118 Temat 118 Temat 118 Temat 118","Temat 117 Temat 117 Temat 117 Temat 117","Temat 116 Temat 116 Temat 116 Temat 116","Temat 115 Temat 115 Temat 115 Temat 115","Temat 114 Temat 114 Temat 114 Temat 114"],"message_table":["Wiadomo\u015b\u0107 - 118 Wiadomo\u015b\u0107 - 118 Wiadomo\u015b\u0107 - 118 Wiadomo\u015b\u0107- 118 Wiadomo\u015b\u0107 - 118...","Wiadomo\u015b\u0107 - 117 Wiadomo\u015b\u0107 - 117 Wiadomo\u015b\u0107 - 117 Wiadomo\u015b\u0107- 117 Wiadomo\u015b\u0107 - 117...","Wiadomo\u015b\u0107 - 116 Wiadomo\u015b\u0107 - 116 Wiadomo\u015b\u0107 - 116 Wiadomo\u015b\u0107- 116 Wiadomo\u015b\u0107 - 116...","Wiadomo\u015b\u0107 - 115 Wiadomo\u015b\u0107 - 115 Wiadomo\u015b\u0107 - 115 Wiadomo\u015b\u0107- 115 Wiadomo\u015b\u0107 - 115...","Wiadomo\u015b\u0107 - 114 Wiadomo\u015b\u0107 - 114 Wiadomo\u015b\u0107 - 114 Wiadomo\u015b\u0107- 114 Wiadomo\u015b\u0107 - 114..."],"data_spotkania_table":["2010-08-01","2010-08-01","2010-08-01","2010-08-01","2010-08-01"],"data_dodania_table":["2010-08-24 23:54:21","2010-08-24 23:54:21","2010-08-24 23:54:21","2010-08-24 23:54:21","2010-08-24 23:54:21"],"activity2_table":["1","3","3","1","2"]}


Jak to zdekodować po stronie JS tak żeby działało w IE?


Będę wdzięczny za pomoc.



Włodek.





Go to the top of the page
+Quote Post
sebekzosw
post 28.08.2010, 23:51:04
Post #7





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


sądząc od funkcji jaką podałeś wcześniej ( $.getJSON(); ) to stwierdziłem, że masz zamiar pobrać tablicę, a nie string... w takim razie w $.ajax ma parametr, w którym jest: dataType: "json"... musisz zamienić to na "text":
dataType: "text"

Tak ogólnie to zachęcam Cię do zapoznania się z funkcją $.ajax

A co do programu, to polecam Ci Firebug...
Go to the top of the page
+Quote Post
everth
post 28.08.2010, 23:57:09
Post #8





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


W responseProcess
[JAVASCRIPT] pobierz, plaintext
  1. var result;
  2. for (key in data) {
  3. result += data[key].toString();
  4. }
  5. alert(result);
[JAVASCRIPT] pobierz, plaintext

I zobacz co ci wypluje pod IE


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
sebekzosw
post 29.08.2010, 00:02:59
Post #9





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


jak już coś to powinieneś się odwoływać
Kod
data.message_ids_table[0]


Ten post edytował sebekzosw 29.08.2010, 00:04:05
Go to the top of the page
+Quote Post
suny79
post 29.08.2010, 09:21:37
Post #10





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 9.03.2010

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


Udało sięexclamation.gif!! smile.gif
Jak to dobrze czasami lepiej odpuścić w nocy, iść spać i walczyć od rana smile.gif

Dzięki Waszej pomocy zrobiłem to w pół godziny co wczoraj zajęło mi pół dnia...

A więc co zmieniłem:

1) header('Content-Type: application/json; charset=utf8'); na header("Content-Type: text/html; charset=utf-8");

2) Tak samo po stronie JS: dataType: 'text', w ajax.

3) Dodałem var data = eval('(' + data + ')'); w funkcji success ajaxa


Do danych w tablicach odnoszę się po staremu:

data.data_dodania_table['.$i.']


Wszystko hula w IE biggrin.gif


Pozdrawiam i dziękuję za pomoc.

Włodek.


PS i tak nie lubię IE smile.gif


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 Wersja Lo-Fi Aktualny czas: 25.07.2025 - 08:07