2010-07-30 2 views
0

Merci, résolu un problème, c'est le suivant. En tant que novice à cela, je reçois toujours une erreur et la simple application ne fonctionne pas. J'obtiens INVALID_STATE_ERR: DOM Exception 11 quand j'exécute le req.open ("Get", url, true); commande dans le javascript situé dans le fichier index.html suivant. L'application simple ne fonctionne pas. Je reçois cela en chrome en mode débogage mais l'application ne fonctionne pas non plus sur IE8 ou FF3. Des idées?INVALID_STATE_ERR: exception DOM 11 lorsque j'exécute le fichier req.open ("Get", url, true);

en utilisant Eclipse pour J2EE avec Java6, Ajax, sur WindowsVista.

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<script type="text/javascript"> 
    var req; 

    function focusIn() { 
     //This is how you comment in javascript portion of code 
     //I will now demonstrate an alert function that calls a messagebox to the field, very useful for debugging 
     //this displays in yoru browser 
     alert('Hey dad this is an alert, this function was called by the onload message of the Body'); 

     //There is even a cooler way, for instance say you wanted to display values 
     var two = 2; 
     var one = 1; 
     var result = two + one; 
     //Display your variable result 
     alert(result); 

     document.getElementById("key").focus(); 

    } 

    function convertToDecimal(){ 
     var key = document.getElementById("key"); 
     var keypressed = document.getElementById("keypressed"); 
     keypressed.value = key.value; 
     // onClick="alert('You clicked the button')" 
     var url = "/AjaxResponseServlet?key=" + escape(key.value); 
     if (window.XMLHttpRequest){ 
      req = new XMLHttpRequest(); 
     } 
     else if (window.ActivateXObject){ 
      req = new ActiveXObject("Microsoft.XMLHTTP") 
     } 
     req.open("Get",url,true); 
     req.onreadystatechange = callback;  
     req.send(null); 
    } 

    function callback() { 
     if (req.readyState==4) { 
      if (req.status == 200){ 
       var decimal = document.getElementById("decimal"); 
       decimal.value = req.responseText; 
      } 
     } 
     clear(); 
    } 

    function clear() { 
     var key = document.getElementById("key"); 
     key.value=""; 
    } 
</script> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Ajax on Java Chapter 2</title> 
</head> 
<body onload="focusIn();" > 
<!-- this is how you comment in HTML Body Portion of the code --> 

<h1> AJAX CHARACTER DECODER </h1> 
<h2> Press a key to find its value. </h2> 
<table> 
    <tr> 
     <td> 
      Enter Key Here -- 
      <input type="text" id="key" name="key" onkeyup="convertToDecimal();" /> 
     </td> 
    </tr> 
</table> 
<br /> 
<table> 
    <tr> 
     <td colspan="5" style="border-bottom:solid black 1px;"> 
      Key Pressed: 
      <input type="text" readonly="readonly" id="keypressed" /> 
     </td> 
     </tr> 
     <tr> 
      <td> Decimal </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="text" readonly="readonly" id="decimal" /> 
      </td> 
    </tr> 
</table> 

<!-- this is how you comment in HTML Body Portion of the code --> 

<h1> AJAX CHARACTER DECODER </h1> 
<h2> Press a key to find its value. </h2> 
<table> 
    <tr> 
     <td> 
      Enter Key Here -- 
      <input type="text" id="key" name="key" onkeyup="convertToDecimal();" /> 
     </td> 
    </tr> 
</table> 
<br /> 
<table> 
    <tr> 
     <td colspan="5" style="border-bottom:solid black 1px;"> 
      Key Pressed: 
      <input type="text" readonly="readonly" id="keypressed" /> 
     </td> 
     </tr> 
     <tr> 
      <td> Decimal </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="text" readonly="readonly" id="decimal" /> 
      </td> 
    </tr> 
</table> 

Mon web.xml actuelle est:

<?xml version="1.0" encoding="UTF-8"?> 

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd » id = "" version = "2.5 WebApp_ID"> Ajax2 index.html index.htm index.jsp default.html default.htm default.jsp AjaxResponseServlet AjaxResponseServlet com.example.servlets.AjaxResponseServlet AjaxResponseServlet /AjaxResponseServlet JAMES JAMES com.example.servlets.JAMES JAMES /JAMES Entrez le code ici

Mon code servlet est:

package com.example.servlets; 

/* * Prend un caractère et convertit décimal et renvoie la valeur * dans la réponse. */ // package com.oreilly.ajax.servlet; // provoque une erreur, donc mis en commentaire

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

AjaxResponseServlet public class étend HttpServlet {

private static final long serialVersionUID = 1L; 

public void doGet(HttpServletRequest req, HttpServletResponse res) 
     throws ServletException, IOException { 

    String key = req.getParameter("key"); 
    if (key != null) { 
     // extract the first character from key 
     int keyInt = key.charAt(0); 
     String decimalString = Integer.toString(keyInt); 
     // setup the response 
     res.setContentType("text/xml"); 
     res.setHeader("Cache-Control", "no-cache"); 
     // write out the response string 
     res.getWriter().write(decimalString); 
    } 
    else { 
     // If key comes back as a null, return a question mark. 
     res.setContentType("text/xml"); 
     res.setHeader("Cache-Control", "no-cache"); 
     res.getWriter().write("?"); 
    } 
} 

}

Répondre

0

La réponse à la question est que l'erreur exception DOM 11 a eu lieu lorsque la commande ajax a été envoyé à un emplacement non conforme à la req.open commander. Ceci est dû au fait que le servlet se trouvait dans le répertoire racine de l'instance tomcat créée par eclipse.Lorsque la valeur d'appel req.open("Get",url,true); de la fonction ConvertToDecimal pour l'URL a été modifiée pour supprimer le caractère / préfixé, tout a fonctionné. La variable URL a été changé pour: var url = "AjaxResponseServlet?key=" + escape(key.value); Sinon, la variable URL fonctionne aussi avec: var url = "/Ajax2/AjaxResponseServlet?key=" + escape(key.value); Le fichier web.xml n'a pas été modifié du tout de sa valeur actuelle pour servlet-mapping de: <servlet-mapping> <servlet-name>AjaxResponseServlet</servlet-name> <url-pattern>/AjaxResponseServlet</url-pattern> </servlet-mapping>

Notez aussi, quand vous obtenez une erreur sur votre navigateur sur la ligne 1, colonne 1 et vous faites une communication ajax, très bien pourrait être une réponse non traitée qui n'est pas un fichier html.

Questions connexes