[ajax] ResponseText

0

Witam,
Mam takie dwie funkcje:

    function displayResponse(request) {
        if (request.readyState == 4) {
            if (request.status == 200 || request.status == 304) {
                showRating(request.responseText);
            }
        }
    }

    var showRating = function(element) {        
        var el = document.getElementById(element);
        el.style.display = 'block';
    };

Problem jest taki, że firebug pokazuje, że zmienna el jest równa null. Kiedy piszę w drugiej funkcji alert(element), responseText wyświetla się prawidłowo. Zauważyłem także, że kiedy piszę coś w rodzaju takiej pętli:
if (responseText == 'tekst') { ... } else { ... }
Zawsze wykonuje się blok else, nawet gdy łańcuch podany w warunku pętli jest prawidłowy. Może dodam też, że kiedy zamieniam argument funkcji getElementById() bezpośrednio na łańcuch zwracany przez responseText document.getElementById('tekst'); wszystko działa poprawnie. Pomożecie w wyłapaniu błędu?

0

if-else działa w JavaScripcie prawidłowo (przeczytaj "Pragmatycznego programistę" -- SELECT nie jest zepsute!). Choć if-else to nie pętla, tylko instrukcja warunkowa.

Sprawdź, czy w responseText na pewno masz TYLKO 'teskt', a nie np. 'tekst\r'. Mogą tam być białe znaki, które wszystko Ci kaszanią.

Jak się dzieją takie cuda, to najlepiej dać link do strony z problemem. W tych paru linijkach nie widzę w sensie stricte błędu. Choć nazwa parametru w funkcji showRating jest bardzo zła. Funkcja nie oczekuje przecież elementu, tylko id (oczekuje stringa, a nie obiektu DOMElement!).

0

Tia, białe znaki. Nie pomyślałem o tym zupełnie, dzięki. Pomogła ta funkcja, może się komus przyda:

replace(/^\s+|\s+$/g, '')
0

A może po prostu nie wysyłać tych znaków z serwera, zamiast potem obcinać?

0

Co za różnica :P poza tym na serwerze wygląda to tak:

echo 'tekst';

Więc nie wiem skąd tu się wzięły białe znaki.

0

Zapewne nie wygląda to tak jak napisałeś, tylko tak:

<?php
// ...

echo 'tekst';

// ...
?> 

Czyli może być np. tak w rzeczywistości:

<?php
// ...

echo 'tekst';

// ...
?>[białe znaki]

Ew. gdzieś tam z przodu może się zawieruszyć jakiś BOM, czy coś w tym stylu.

Różnica jest w ilości pracy (zwykle łatwiej usunąć białe znaki niż napisać funkcję JS), a także w samej logice i spełnianiu ograniczeń. Co ma zwrócić serwer? ID elementu, czy może ID elementu otoczone bliżej nieokreśloną liczbą i typem białych znaków? ;) Jakbyś to napisał w specyfikacji?

Tbh ja pisząc skrypt JavaScript raczej i tak uczyniłbym go odpornym na białe znaki. Ale odporny na takie białe znaki jest choćby JSON czy XML.

0

Tak, chrzaniło przez te znaki po zamykającym tagu php. Dzięki, do tej pory nie wiedziałem że to możliwe :P

0

W ogóle zamykający tag php nie jest konieczny. Najlepiej nie używać go w plikach, gdzie używa się komunikacji klient-serwer, czyli np. AJAX właśnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0