Skocz do zawartości

[JS] Cannot set property 'innerHTML' of null


Marek.S

Rekomendowane odpowiedzi

Mam dziwny problem z ShoutBoxem na mojej stronie. SB posługując się xmlhttp wysyła zapytanie do skryptu php i ładuje shouty z pliku. Niestety co jakiś czas (za którymś tam odświerzeniem) pojawia się dziwny błąd.

Shouty się nie ładują, a debuger z Google Chrome zwraca mi taki oto komunikato-error:

Uncaught TypeError: Cannot set property 'innerHTML' of null

 

Moje ładowanie shoutów wygląda następująco:

GML
...

if ( xmlhttp.readyState == 4 )

{

if ( xmlhttp.status == 200 )

{

text = xmlhttp.responseText;

if ( text != '' ) document.getElementById( 'shoutbox_frame' ).innerHTML = text;

}

}

...

 

Analizując komunikat od Chrome, zrozumieć można, że xmlhttp nie przesłało nam nic bądz przesłało null. Idąc tym tokiem chciałem to sprawdzić warunkiem:

GML
if ( text == null || text == false || text == 0 || text == '' )

{

alert( 'Przesło null bądz ciąg pusty' );

wyslij_zapytanie();

}

 

alert nie pokazuje się => zaden z warunków nie został spełniony, więc ciąg nie jest pusty, a błąd nie ustąpił.

 

Jak mam rozwiązać ten problem?

Odnośnik do komentarza
Udostępnij na innych stronach

Cannot set property 'innerHTML' of null
Jak byś znał angielski, nie było by problemu. Podpowiem: Nie można ustawić właściwości 'innerHTML' dla null.

 

getElementById najwidoczniej zwraca Ci null. Sprawdź czy w twoim hatemelu jest napewno taki element. eot.

Odnośnik do komentarza
Udostępnij na innych stronach

na pewno jest.

             <!-- ShoutBox -->
             <div class="shoutbox">
                 <div class="menu_top">ShoutBox</div>

 

poza tym błąd nie wyskakuje za każdym razem, tylko np co 20 odświeżeń.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Idąc tym co powiada kofel:

 

var o;
o=document.getElementById( 'shoutbox_frame'  );
if (o != null) {o.innerHTML = text;}

 

btw. w kodzie powyżej nie ma id="shoutbox_frame".

 

Polecam (jak zawsze) jQuery, bo nie ma sensu na nowo wymyślać koła i warto korzystać z dobrych bibliotek i frameworków czy nawet klas umieszczonych w sieci.

W jQuery ograniczasz się do

$('#shoutbox_frame').load('strona.php');

Odnośnik do komentarza
Udostępnij na innych stronach

nie wkleił się cały kod.

             <!-- ShoutBox -->
             <div class="shoutbox">
                 <div class="menu_top">ShoutBox</div>
                 <div class="shoutbox_middle">
                     
                     <!-- Shouty -->
                     <div id="shoutbox_frame"></div>

+

 

 

 

lol, przecież nie odwoływał bym się do klasy.

Zmieniłem, że wysyła się zapytanie dopiero na onload. Zaraz pokminie z tym sprawdzaniem gnyska :)

 

 

 

E:

czemu w operze działa

window.onload = alert('alert');

 

a to już nie:

window.onload = send();

?

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem, u mnie Opera nie robi problemów z:

 

<script>function test(){ alert('x'); } window.onload = test();</script>

Nie wiem czy widzicie, ale przypisujecie window.onload wartośc jaką zwraca test() a nie wskaźnik na tą funkcje ; )

Dlatego Marek twój kod nie ma prawa działać, bo i tak wykona się przed załadowaniem DOM'a.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...