【问题标题】:What is wrong with XMLHttpRequest request? [closed]XMLHttpRequest 请求有什么问题? [关闭]
【发布时间】:2011-05-09 14:08:23
【问题描述】:

我正在使用 XMLHttpRequest 创建一个简单的表单提交并从 servlet 获取会话变量。但似乎没有任何效果。有人能指出我哪里出错了吗?

这是表格

<form method="post" target="_self" action="/temp/Welcome.html">
    <table>
        <tr>
            <td>Email</td>
            <td><input type="text" id="email" name="email" value="a@a.com"></td>
        </tr>
        <tr>
            <td>Project ID</td>
            <td><input type="text" id="projectid" name="projectid" value="1111"></td>
        </tr>
        <tr>
            <td colspan="2" align="right"><input type="button" id="submitbutton" value="Submit" onclick="submitLogin()"></td>
        </tr>
    </table>
</form>

这里是 submitLogin 函数

function submitLogin()
{
 var url_action="/temp/Login";
 var client; 
 var dataString;
 if (client.XMLHttpRequest){ // IE7+, Firefox, Chrome, Opera, Safari
     client=new XMLHttpRequest();
 } else {                    // IE6, IE5
     client=new ActiveXObject("Microsoft.XMLHTTP");
 }

 client.onreadystatechange=function(){
     alert(client.responseText);
     if(client.readyState==4&&client.status==200)
     {
         alert(client.responseText);
     }
     else
         alert("Error: return status code "+client.status+" "+client.statusText);
 };
 dataString="email="+document.getElementById("email").value;
 client.open("POST",url_action,true);
 client.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

 client.send(dataString);
}

和我在 Login.java servlet 中的 post 方法

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    PrintWriter out = response.getWriter();
    response.setContentType("text/plain");

    paramMap=request.getParameterMap();
    if (paramMap == null)
        throw new ServletException(
          "getParameterMap returned null in: " + getClass().getName());

    iterator=paramMap.entrySet().iterator();
    //System.out.println(paramMap.size());
    String str="";

    while(iterator.hasNext())
    {
        Map.Entry me=(Map.Entry)iterator.next();
        String[] arr=(String[])me.getValue();
        emailId=arr[0];
        //System.out.println(me.getKey()+" > "+emailId);

    }
    rand=new Random();
    randomInt=rand.nextInt(1000000);
    emailId=randomInt+emailId;
    System.out.println(emailId);
    out.println(emailId);

    /*creates a new session if a session does not exist already*/
    session=request.getSession();
    session.setAttribute("uid", emailId);

    out.close();
}

警报和 System.out 似乎都没有显示任何响应。请指导我。谢谢

注意:在 IE 8 中它显示 xmlhttprequest 为空或不是对象,login.js 在第 9 行

【问题讨论】:

  • 第 9 行是什么?请不要让我们猜测。
  • 如果您使用 AJAX 做任何事情,我强烈建议您使用 jQuery。他们已经发现并修复了几乎所有的跨浏览器错误,并使其更易于控制。
  • 您是否考虑过使用 JQuery 来简化您的代码?
  • @Thomas:我在第 1 行发现了错误。 9 我发了。 :) @Alastair 和 @Codemwnci:我使用 AJAX 来做同样的事情 stackoverflow.com/questions/5854753/… 只是想尝试使用纯 html 和 javascript。谢谢大家:)
  • 我同意,jQuery 让使用 AJAX 变得更容易。我不是 AJAX 专家,并且经常尝试不要在 JavaScript 中编写太多代码,但即使我可以在大约一个小时内使用 jQuery 设置一些 AJAX。它只适用于我们使用的浏览器(IE 7+、Safari、FF 3.5+)。

标签: java html servlets


【解决方案1】:

您的 Java 脚本中似乎有一个简单的错字

var client; 

if (client.XMLHttpRequest){
    client=new XMLHttpRequest();
} else {
    client=new ActiveXObject("Microsoft.XMLHTTP");
}

您正在声明一个名为 client 的变量并要求它是 XMLHttpRequest 成员。您可能打算使用 window.XMLHttpRequest。

【讨论】:

    【解决方案2】:

    对不起,我的错。这是 if (window.XMLHttpRequest) 而不是 if (client.XMLHttpRequest) 现在可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 2015-11-30
      • 2019-09-02
      • 1970-01-01
      相关资源
      最近更新 更多