Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [IE] metoda appendChild nie działa
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Asmox
"Misiaczki" zirytowały kolejnego człowieka. Naprawdę mam ochotę olać to i napisać na stronie, że jak chcą ją obejrzeć, to niech zainstalują sobie inną przeglądarkę, zgodną ze standardami. Chociaż tym razem chodzi o AJAX i JS, tu także są problemy. Ale nie dam tak łatwo za wygraną :-)
Oto problem: Starałem się utworzyć stronę opierając ją o Ajaksa. Czyli wykorzystać PHP do pobierania danych z bazy, a nie do generowania całej strony. W FF wszystko jest OK, natomiast IE czepia się przy podmianie elementów strony (DOM).
Wywala błąd:

Cytat
Szczegóły błędu na stronie sieci Web

Agent użytkownika: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.1)
Sygnatura czasowa: Mon, 23 Aug 2010 19:58:38 UTC


Wiadomość: Nieoczekiwane wywołanie metody lub dostępu do właściwości.
Wiersz: 5
Znak: 5
Kod: 0
Identyfikator URI: http://*** ścieżka ***/ajaxText-utils.js

Oto zawartość tego skryptu:
Kod
/*1.*/function replaceText(el, text) {
/*2.*/  if (el != null) {
/*3.*/    clearText(el);
/*4.*/    var newNode = document.createTextNode(text);
/*5.*/    el.appendChild(newNode);
  }
}

function clearText(el) {
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        el.removeChild(childNode);
      }
    }
  }
}

function getText(el) {
  var text = "";
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        childNode.normalize();
        if (childNode.nodeType == Node.TEXT_NODE) {
          text = text + childNode.data;
        }
      }
    }
  }
  return text;
}

Nie wiem, czy po prostu appendChild jest nieobsługiwany czy coś. Jak googlowałem to pisali coś o <TBODY>, ale nie bardzo rozumiem o co chodzi. Pomożecie?
erix
A może byś tak ten skrypt wystawił? Debuggery mamy w oczach?
Asmox
Który? Ten, który wykorzystuje funkcje? Proszę bardzo:
Kod
function pageRequest(id) {
  var pid = id;
  var url = 'server/pageLoader.php';
  
  request.open('POST', url, true);
  request.onreadystatechange = updatePage;
  request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  request.send('pid=' + escape(pid));
}

function updatePage() {
  if(request.readyState == 4) {
    if(request.status == 200) {
      alert(request.responseText);
      var jsonData = JSON.parse(request.responseText);
      
      var title = jsonData.title;
      var content = jsonData.content;
      var nav = jsonData.nav;
      
      var titleEl = document.getElementsByTagName('title')[0];
      var contentEl = document.getElementById('content_in');
      var navEl = document.getElementById('nav_in');
      // TUTAJ WYKORZYSTUJĘ FUNKCJE DO PODMIENIANIA ZAWARTOŚCI
      replaceText(titleEl, title);
      contentEl.innerHTML = content;
      navEl.innerHTML = nav;
      
    }
    else {
      var message = request.getResponseHeader("Status");
      if((message == null) || (message.length <= 0)) {
        alert('Błąd! Status żądania ma wartość '+request.status);
      }
      else {
        alert(message);
      }
    }
  }
}
erix
Debuggery działają na wykonywanym kodzie.

Temat: JavaScript jesli Twoj watek go dotyczy KONIECZNIE przeczytaj
Asmox
Chodzi, że mam zahostować ten skrypt, tak?
http://www.asmoxtestphp.cba.pl/
Przy ładowaniu strony jest wyświetlany alertem request.responseText, który powinien być elementami strony zapisanymi w formacie JSON. Następnie powinny być one powrzucane w odpowiednie miejsca szablonu z wykorzystaniem drzewa DOM. Problem w tym, że te hostingi dorzucają jakieś swoje reklamy i wygląda na to, że właśnie tam gdzie powinna być zawartość stronki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.