Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jquery] [ajax] [utf8] Nieprawidłowy JSON
uirapuru
post
Post #1





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


Hej!

Mam taki problem:
Jak w temacie - zwraca mi błąd. Przemianowałem już funkcję nawet na podstawową wersję $.ajax() ($.getJSON to alias dla $.ajax + $.parseJSON jak dobrze pamietam):

  1. $.ajax({
  2. type: "POST",
  3. url: "ajax.php?getAll",
  4. contentType: "application/json; charset=utf-8",
  5. dataType: "json",
  6. success: function(data) {
  7. $("select option").remove();
  8. $(data).each(function(index,item) {
  9. $("select").append("<option value=\""+index+"\">"+item.name+"</option>");
  10. });
  11. },
  12. error: function (XMLHttpRequest, textStatus, errorThrown) {
  13. alert(XMLHttpRequest.responseText);
  14. }
  15. });


Kod się ładnie przesyła (w Firebug widać), ale zamiast success: wykonuje się error: a w responseText to właśnie zawartość zwracana. Oto ona:
  1. [{"name":"rtyryrtyrtyrtyrtyrty","desc":"hrtey retyber e","dir":"60a5c2e031f46ded08e885112710cfcc"}]

1. Testowe środowisko to Zend Server + Windows XP (ponoć to może mieć znaczenie)
2. Ustawiłem na początku skrytpu ajax.php Header("Content-type: application/json")
3. Skrypt, który dostaję w wyniku wrzucam do JSON Validatora i pokazuje błąd. Wymieniam jedynie pierwszy nawias kwadratowy (zaznaczam go po prostu i wciskam guzik na klawiaturze z tym samym nawiasem) i JSON Validator twierdzi, że już kod jest poprawny.

WTF?questionmark.gif?

W edytorze szesnastkowym faktycznie odpowiedź zawiera niewidoczne znaki na początku (5 znaków o kodzie %3F). Po ich skasowaniu wszystko jest ok. Nie wiem tylko jak pozbyć się ich przy odpowiedzi ze skryptu PHP.

Pododawałem już gdzie mogłem kodowania (header z php, ajaxSetup dla jquery, meta w head strony, co jeszcze?) i wciąż dostaję Invalid JSON sad.gif

Ten post edytował uirapuru 19.06.2010, 14:39:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
yevaud
post
Post #2





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


moze na poczatku pliku ajax.php, jeszcze przed <?php masz jakies niewidoczne znaki ?
Go to the top of the page
+Quote Post
uirapuru
post
Post #3





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


Powiem Ci, że nie wpadłem na to, ale każdy plik zwykle zaczynam od <?, więc wątpie, by istniała taka możliwość. Co lepsze, póki strona była w ISO-8859-2 wszystko było w najlepszym porządku.

Nie napisałem, że problem dotyczy jQuery w ostatniej wersji!!!! smile.gif Ale znawcy się pewnie domyślili winksmiley.jpg
Go to the top of the page
+Quote Post
yevaud
post
Post #4





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


moze masz znacznik utf na poczatku pliku, sprawdz w ustawieniach swojego edytora czy jest cos o UTF BOM

"The presence of the UTF-8 BOM may cause interoperability problems with existing software that could otherwise handle UTF-8, for example:

* Older text editors may display the BOM as "" at the start of the document, even if the UTF-8 file contains only ASCII and would otherwise display correctly.
* Programming language parsers can often handle UTF-8 in string constants and comments, but cannot parse the BOM at the start of the file.
* Programs that identify file types by leading characters may fail to identify the file if a BOM is present even if the user of the file could skip the BOM. Or conversely they will identify the file when the user cannot handle the BOM. An example is the Unix shebang syntax.
* Programs that insert information at the start of a file will result in a file with the BOM somewhere in the middle of it (this is also a problem with the UTF-16 BOM). One example is offline browsers that add the originating URL to the start of the file.
"

Ten post edytował yevaud 19.06.2010, 14:44:16
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




skoro w iso ci dzialala, a nagle w utf8 przestala, to zapewne chodzi o BOM
Poczytaj o tym, było nie raz na forum. Masz tak "magicznie" zrobic, by tego BOM nie było. smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
uirapuru
post
Post #6





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


Faktycznie, chodziło o BOM exclamation.gif!

Serdecznie wszystkim dziekuje za pomoc. Przeleciałem wszystkie pliki Notepad++ i dałem konwersję na UTF-8 bez BOM. Od razu ruszyło i to z kopyta. Dzięki!
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: 20.08.2025 - 12:31