【问题标题】:Problem while executing ajax执行ajax时出现问题
【发布时间】:2009-11-30 09:09:14
【问题描述】:

我正在尝试使用 Ajax 和 servlet 做一个简单的应用程序。但是当我试图执行应用程序时,它不起作用。 请检查代码,让我知道会出现什么问题?

function createRequest()
    {
        alert("hai createRequest()");
        try
        {
            req=new XMLHttpRequest();

        }
        catch(trymicrosoft)
        {
            try
            {
                req=new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(othermicrosoft)
            {
                try
                {
                    req=new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(failed)
                {
                    req=null;
                }
            }

        }
        if(req==null)
            alert("req==null");

    }
    function startRequest()
    {
        alert("hai startRequest()");
        createRequest();
        alert("hai created Request()");
        var username=document.getElementById("user").value;
        req.open("get","http://localhost:8080/login/CheckLogin?user="+username,true);
        req.onreadystatechange=handleStateChange;
        alert("hai returned from handle state change");
        req.send(null);

    }

    function handleStateChange()
    {
        alert("hai handleStateChange()");
        if(req.readyState==4)
        {
            if(req.status==200)
            {
                var message=req.responseXML.getElementsByTagName("valid")[0].childNodes[0].nodeValue;
                document.getElementById("results").innerHTML=message;
            }
            else
            {
                alert("Sorry status failed");
                document.getElementById("results").innerHTML="Sorry problem in status";
            }
        }
        else
        {
            alert("Sorry readyStatus failed");
            document.getElementById("results").innerHTML="Sorry problem in readyState";
        }
    }

上面的函数是用Javascript和servlet写的

package com.assignment.login;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class CheckLogin extends HttpServlet
{
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
    {
        System.out.println("Hai i have entered into servlet");
        String userId=request.getParameter("user");
        if(userId!=null && !userId.equals("jeya"))
        {
            response.setContentType("text/xml");
            response.getWriter().write("<valid>U can use this id</valid>");
        }
        else
        {   
            response.setContentType("text/xml");
            response.getWriter().write("<valid>U cannot use this id</valid>");
        }
    }


    public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
    {
        doGet(request,response);
    }
}

但在输出中,正在打印以下警报,

Hai start request
Hai create request
Hai created request
Hai returned from handle state change
hai handle state change
sorry readyStatus  failed
hai handle state change
sorry readyStatus  failed
hai handle state change
sorry readyStatus  failed
hai handle state change
sorry status  failed

我的 web.xml,

<web-app>
<servlet>
    <servlet-name>CheckLogin</servlet-name>
    <servlet-class>com.assignment.login.CheckLogin</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>CheckLogin</servlet-name>
    <url-pattern>/CheckLogin</url-pattern>
</servlet-mapping>

在 servlet 中,我打印了“我已进入 servlet”,但它没有在服务器窗口中打印出来。那会是什么问题,请给我建议来解决它...提前谢谢.. .

编辑: 这是我尝试执行上述应用程序时发生的异常。但是 CheckLogin 类在正确的位置...但是相同的代码在 Eclipse 中工作。所以请任何人告诉我可能是什么问题??? 请求的资源 (/login/CheckLogin) 不可用。

【问题讨论】:

  • 尝试直接从浏览器中触发它,然后查看它是否命中您的 servlet。
  • 我没有使用除文本编辑器之外的任何特殊编辑器。所以每次我都会直接将它触发到浏览器中。
  • 是的,它没有命中 servlet,这就是我的问题。
  • 感谢大家的宝贵建议。
  • 下一步:jQuery。您不希望在生产中使用此样板 JS 代码。

标签: java javascript ajax servlets


【解决方案1】:

请检查您是否遵循了正确的命名约定,因为我认为代码中没有错误。

【讨论】:

  • 谢谢哈里.. 是的,我错过了 WEB-INF 的命名约定。现在它工作正常..
【解决方案2】:

您使用了错误的网址:

req.open("get","http://localhost:8080/login/CheckLogin?user="+username,true);

我不知道您使用的是什么服务器,但使用 CheckLogin 就足够了:

req.open("get","CheckLogin?user="+username,true);

或 req.open("get","/login/CheckLogin?user="+username,true);

可能无法访问 localhost:8080 的服务器。

【讨论】:

    【解决方案3】:

    我认为您必须在函数之外的 javascript 页面顶部定义 req 变量。喜欢,

    var req;
    
    function yourFunctions(){
    
    .
    .
    .
    .
    
    
       }
    

    试试看。

    【讨论】:

    • 是的,我已经用顶部的值 null 进行了初始化,但我忘了提及..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多