2009-06-22 18 views
6

Używam jQuery do tworzenia zapytań ajaxowych. Dane docierają do PHP ładnie, ale odpowiedź nie wraca poprawnie do javascript. W jakiś sposób przed odpowiedzią jest miejsce. Wiem o tym, ponieważ Firebug tak mówi, a mój kod nie działa, ponieważ tam jest miejsce. Kiedy spodziewam się, że będzie miejsce, działa dobrze. Jakieś pomysły co do tego, co może dodać przestrzeń?Przestrzeń przed odpowiedzią Ajax (jQuery, PHP)

Oto moja ajax funkcja:

function my_ajax (aurl, adata, aretfunc) { 
$.ajax({ 
    type: "POST", 
    url: aurl, 
    data: adata, 
    success: function(msg) { 
    eval(aretfunc+'(msg);'); 
    } 
}); 
} 

Odpowiedz

18

Look dla fałszywych białych znaków spoza tych <?php ?> znaczników w pliku PHP. Wszelkie takie spacje otrzymają dane wyjściowe po wykonaniu skryptu PHP. Jeśli twój plik PHP zawiera inne pliki PHP, to samo dotyczy również tych plików.

+2

+1 Może to być jeden z najbardziej podstępnych błędów. Napotkałem to podczas pracy nad jakimś kodem PHP razem z zewnętrznym dostawcą. W jednej iteracji, bez testowania, postanowili dodać blok komentarzy u góry każdego pliku w swoim własnym bloku PHP, a następnie pustą linię przed faktycznym blokiem kodu PHP. Cóż, ta pusta linia była uważana za treść wysyłaną do przeglądarki, więc żaden/cały kod, który następnie musiał ustawić nagłówki HTTP (na przykład), nie działał marnie. –

+0

Hi ... To samo dzieje się teraz z moim kodem. Próbowałem usunąć niepotrzebne miejsce bez wpływu na czytelność kodu ... nadal mam miejsca ... W każdym razie ... użyłem spacji w moich wcześniejszych kodach dość liberalnie, ale dopiero teraz widzę ten problem ... – SpikETidE

5

Uzgodniono, poszukaj pozornej białej spacji poza <?php ?>. Jedna z sugestii, a druga całkowicie legalna, to po prostu usunąć końcowe: ?>, ponieważ są niepotrzebne. In fact, it's a coding standard for Drupal.

+0

Jedna wskazówka, którą znalazłem podczas badania problemu takiego jak to robiło źródło widoku w przeglądarce i widziałem pustą linię przed deklaracją DOCTYPE (pierwsza linia w strona internetowa). –

+0

To. Właśnie usunąłem?> Z końca mojego pliku php CodeIgniter i naprawiłem problem, nie było już więcej białych znaków! – skiindude22

4

W niektórych przypadkach stwierdziłem, że samo uruchomienie odpowiedzi za pomocą $ .trim() przed wykonaniem jakichkolwiek czynności może działać całkiem dobrze.

Oczywiście, powyższe rozwiązania nadal mają zastosowanie, ale jeśli znajdujesz się w sytuacji, w której nie możesz tego zmienić, pomyślałem, że warto je wyrzucić.

+0

To jest dobre. Bardzo wydajny pomysł, jeśli debugowanie początkowego kodu zajmie dużo czasu. – Haluk

Powiązane problemy