Marek.S Opublikowano 16 Marca 2010 Udostępnij Opublikowano 16 Marca 2010 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 Więcej opcji udostępniania...
Kofel Opublikowano 16 Marca 2010 Udostępnij Opublikowano 16 Marca 2010 Cannot set property 'innerHTML' of nullJak 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 Więcej opcji udostępniania...
Marek.S Opublikowano 16 Marca 2010 Autor Udostępnij Opublikowano 16 Marca 2010 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 16 Marca 2010 Administratorzy Udostępnij Opublikowano 16 Marca 2010 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 Więcej opcji udostępniania...
Kofel Opublikowano 16 Marca 2010 Udostępnij Opublikowano 16 Marca 2010 <div class="shoutbox"> != <div id="shoutbox"> To jest różnica, co? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 16 Marca 2010 Autor Udostępnij Opublikowano 16 Marca 2010 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 16 Marca 2010 Administratorzy Udostępnij Opublikowano 16 Marca 2010 Nie wiem, u mnie Opera nie robi problemów z: <script>function test(){ alert('x'); } window.onload = test();</script> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 16 Marca 2010 Udostępnij Opublikowano 16 Marca 2010 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę