Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery] [ajax] [utf8] Nieprawidłowy JSON
Forum PHP.pl > Forum > XML, AJAX
uirapuru
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
yevaud
moze na poczatku pliku ajax.php, jeszcze przed <?php masz jakies niewidoczne znaki ?
uirapuru
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
yevaud
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.
"
nospor
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
uirapuru
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!
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.