2010-07-30 108 views
0

谢谢,解决了一个问题,这是下一个问题。作为一个新手,我仍然遇到一个错误,简单的应用程序无法正常工作。我得到INVALID_STATE_ERR:当我执行req.open(“Get”,url,true)时,DOM异常11。命令位于以下index.html文件中的javascript中。简单的appl不起作用。我在调试模式下使用chrome,但该应用程序在IE8或FF3上也不起作用。有任何想法吗?INVALID_STATE_ERR:当我执行req.open(“Get”,url,true)时,DOM异常11。

在WindowsVista上使用Eclipse for J2EE和Java6,Ajax。

的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> 

我当前的web.xml是:

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

http://java.sun.com/XML/NS/JavaEE的/网络app_2_5.xsd” ID = “WebApp_ID” 版本= “2.5”> 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 在这里输入的代码

我的servlet代码是:

​​

/* * 注意到一个字符并将其转换为十进制,并在响应中发回 *值。 */ // package com.oreilly.ajax.servlet; //导致错误,因此注释掉

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

公共类AjaxResponseServlet延伸的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("?"); 
    } 
} 

}

回答

0

的问题的答案是,当AJAX命令与req.open发送到不正确的位置发生异常DOM 11错误命令。这是因为servlet位于eclipse创建的tomcat实例的根目录中。当URL的ConvertToDecimal函数的req.open("Get",url,true);调用值被更改为删除前缀/字符时,所有工作。 url变量更改为:var url = "AjaxResponseServlet?key=" + escape(key.value); 或者,url变量也适用于:var url = "/Ajax2/AjaxResponseServlet?key=" + escape(key.value); web.xml文件完全没有改变,它的当前值为servlet映射:<servlet-mapping> <servlet-name>AjaxResponseServlet</servlet-name> <url-pattern>/AjaxResponseServlet</url-pattern> </servlet-mapping>

请注意,当您第1行第1列上的浏览器出现错误,并且您正在进行ajax通信,很可能是未处理的响应不是HTML文件。

相关问题