Problemy z ajax i utf8

Problemy z ajax i utf8
uirapuru
  • Rejestracja: dni
  • Ostatnio: dni
0

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):

$.ajax({
type: "POST",
url: "ajax.php?getAll",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
$("select option").remove();
$(data).each(function(index,item) {
$("select").append("<option value=""+index+"">"+item.name+"</option>");
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});

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:

[{"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????

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.

T3
  • Rejestracja: dni
  • Ostatnio: dni
0

najprawdopodobniej sa wypisywane przez skrypt,
pamiętam, że kiedyś męczyłem się z komunikatem dot. tego, że session_start() uruchamiało się wywołując błąd, ponieważ już nagłówki zostały wysłane.
Okazało się, że miałem kilka enterów przed <?php i/lub kilka po ?>
taka pewnie jest przyczyna, bo skads te znaki musza sie brac ;p
a jak brak pomyslu, to przekopiowywuj plik fragment po fragmencie i sprawdzaj do kiedy bedzie bezblednie dzialac

uirapuru
  • Rejestracja: dni
  • Ostatnio: dni
1

Dzięki za odpowiedź. Jak się okazało, zrobiłem nieopatrznie konwersję na UTF8 z BOM - a powinno być bez BOM. te nadmiarowe dane to własnie jakies tam dodatkowe bajty, które są zerowej długości w edytorze tekstu a przez to niewidoczne. Po przekonwertowaniu w notepad++ na UTF bez BOM wszystko działa jak trzeba.

Dzieki! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.