Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX JSON] $.getJSON problem z IE8
Forum PHP.pl > Forum > XML, AJAX
suny79
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.
sebekzosw
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. });
everth
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
suny79
Niestety nie pomogło z tą funkcją.


Czy znacie jakieś metody, narzędzia do testowania AJAX GET?
everth
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
suny79
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.





sebekzosw
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...
everth
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
sebekzosw
jak już coś to powinieneś się odwoływać
Kod
data.message_ids_table[0]
suny79
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


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.