2015-10-29 5 views
0

Я начинающий ajax. Я пытаюсь написать простое предложение. Когда я использую тест FireFox Он работал, но когда я использую хром Я получил, что: Uncaught TypeError: Не удается прочитать свойство «getElementsByTagName» нулевыхAjax, xhr.responseXML.getElementsByTagName() не работал на chrome и IE, но работал на firefox

Я написал это на функцию обратного вызова

xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4 && xhr.status === 200) { 
     var data = xhr.responseXML; 
     var x = data.getElementsByTagName("suggestion"); 
     var div = document.getElementById("suggest") 
     div.innerHTML = ""; 
     showSuggest(); 
     for (var i = 0; i < x.length; i++) { 
      var result= x[i].firstChild.nodeValue; 
      div.innerHTML += "<div id='sResult' onmouseover='over(this)' onmouseout='out(this)' onclick='replace(this)' >" 
       + result+ "</div>"; 
     } 
    } 
} 

и это по методу Servlet doGet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("test/xml;charset=UTF-8"); 
     response.setHeader("Cache-Control", "no-cache"); 
     response.setHeader("Pragma", "no-cache"); 
     String keyword = request.getParameter("keyword"); 

     //get suggestion from db 
     List<KeyWord> kw = SearchService.suggest(keyword); 
     PrintWriter pw = response.getWriter(); 
     pw.println("<?xml version='1.0' encoding='UTF-8'?>"); 
     pw.write("<suggestions>"); 
     for(KeyWord k:kw){ 
      pw.write("<suggestion>"); 
      pw.write(k.getContent()); 
      pw.write("</suggestion>"); 
     } 
     pw.write("</suggestions>"); 
     pw.flush(); 
     pw.close(); 
    } 
+0

Java имеет API-интерфейсы для создания хорошо сформированного XML, поэтому рекомендуется использовать их вместо выполнения конкатенации строк. Если 'k.getContent()' содержит амперсанд '&' или меньше знака '<', тогда ваш ответ не является корректным XML. Является ли это причиной ошибки, которую я не знаю, нажмите F12 в Chrome или IE, чтобы открыть инструменты разработчика и проверить сеть консоли для заголовков и кода ответа HTTP. –

ответ

0

Если response.setContentType("test/xml;charset=UTF-8"); не опечатка в сообщении, то исправить это сказать response.setContentType("text/xml;charset=UTF-8"); и, надеюсь, IE и Chrome заполнить responseXML.

+0

спасибо, я должен быть более осторожным –

-1

Вы пробовали этот

var x = data.documentElement.getElementsByTagName("suggestion"); 

вместо

var x = data.getElementsByTagName("suggestion"); 

?

+1

Хотя код оценен, он всегда должен иметь сопроводительное объяснение. Это не должно быть долго, но это ожидается. – peterh

+0

благодарит за комментарий - я обязательно узнаю об этом и применил вашу рекомендацию к будущим сообщениям. –

+0

Мое удовольствие :-) До тех пор, [это] (http://meta.stackoverflow.com/questions/291362/my-question-was-downvoted-closed-because-it-was-full-of-grammatical-mistakes -wh/291370 # 291370) также могут быть полезны для вас. – peterh

Смежные вопросы