Как устранить ошибку «Не удалось преобразовать аргумент JavaScript arg 0 [nsIDOMHTMLDivElement.appendChild]» - PullRequest
4 голосов
/ 07 мая 2010

У меня есть объект json, возвращенный из ajax, и когда я его предупреждаю, он отображается правильно, и я пытаюсь добавить их в неупорядоченный список и добавить его в div заполнителя, но выдает ошибку выше.

function handleResponse() {
  if(httpa.readyState == 4){
  var response = httpa.responseText;
    //alert(response);
    if(response!='empty')
    {
      //alert(response);
      eval("prod="+response);
      var len = prod.length;
      var st = "<ul>";
      for(var cnt=0;cnt<len;cnt++)
      {
        st = st + "<li onclick='set("+prod[cnt].id+")'>"+prod[cnt].name+"</li>";  
      }      
      st = st + "</ul>";
      }
      var tt = document.getElementById('holder1');
      tt.appendChild(st); // i even tried **tt.appendChild(eval(st));**
      tt.style.display = 'block';  
    }

}

Ответы [ 2 ]

3 голосов
/ 07 мая 2010

Несколько комментариев:

  • eval("prod="+response); - не делайте этого.Он создает глобальную переменную 'prod', может выполнять произвольный код, предотвращает ускорение вашего кода механизмом JS и, как правило, считается плохой практикой кодирования.
    • Вместо этого используйте JSON-анализатор (из json.org или из вашей любимой библиотеки).
  • tt.appendChild(st); // i even tried **tt.appendChild(eval(st));** - appendChildпринимает DOM-узел;st является строкой, а eval(st) оценивает st, предполагая, что она содержит код JavaScript (поэтому запуск его в XML приведет к синтаксической ошибке, если вы не используете E4X , которая все равно не будетсоздать объект, подходящий для использования с appendChild).
    • Вы должны либо проанализировать созданный вами HTML-код (через innerHTML, createDocumentFragment, либо - снова - с помощью помощника из вашей любимой библиотеки JS)
  • Наконец, если вы делаете это много, рассмотрите , используя вместо этого шаблоны .
1 голос
/ 07 мая 2010
tt.innerHTML += st;

Поскольку st является строкой, а не элементом DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...