Ajax XMLHttpRequest请求/Servlet响应为null

Ajax XMLHttpRequest请求/Servlet响应为null,ajax,servlets,Ajax,Servlets,servlet有一个问题。我通过XMLHttpRequest将表单数据发送到服务器,但servlet错误地处理请求对象,并在响应对象中发送“null.null”。我尝试了以下方法,但没有任何帮助: 按encodeURIComponent编码“document.getElementsByName('contractor').value” 将FormData的对象作为参数传递给.send() 将表单中的enctype属性更改为“multipart/formdata” 使用get方法 请看一看。如

servlet有一个问题。我通过XMLHttpRequest将表单数据发送到服务器,但servlet错误地处理请求对象,并在响应对象中发送“null.null”。我尝试了以下方法,但没有任何帮助:

  • 按encodeURIComponent编码“document.getElementsByName('contractor').value”
  • 将FormData的对象作为参数传递给.send()
  • 将表单中的enctype属性更改为“multipart/formdata”
  • 使用get方法
请看一看。如果有任何建议如何使它在不使用jQuery的情况下工作,我将不胜感激

HTML:

<div id="request-form">
    <form enctype="application/x-www-form-urlencoded" method="post">
        Contractor<input type="text" name="contractor"><br>
        Contract No<input type="text" name="contract-no">
        <input type="button" onclick=clickOnButton() value="Submit"><br>
    </form>
</div>
var httpRequest;

function clickOnButton() {
    if (window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }

    var dataForRequest = 'contract=' + document.getElementsByName('contractor').value + '&contract-no=' + document.getElementsByName('contract-no').value;
    httpRequest.onreadystatechange = responseHandler;
    httpRequest.open('POST', "/AjaxServ", true);
    httpRequest.send(dataForRequest);
}

function responseHandler() {
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            var line = httpRequest.responseText;
            alert(line);
        }
    }
}
public class ServletClass extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String contractor = req.getParameter("contractor");
        String contractNo = req.getParameter("contract-no");
        resp.setContentType("text/plain");
        PrintWriter out = resp.getWriter();
        out.write(contractor + "." + contractNo);
    }
}
Java:

<div id="request-form">
    <form enctype="application/x-www-form-urlencoded" method="post">
        Contractor<input type="text" name="contractor"><br>
        Contract No<input type="text" name="contract-no">
        <input type="button" onclick=clickOnButton() value="Submit"><br>
    </form>
</div>
var httpRequest;

function clickOnButton() {
    if (window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }

    var dataForRequest = 'contract=' + document.getElementsByName('contractor').value + '&contract-no=' + document.getElementsByName('contract-no').value;
    httpRequest.onreadystatechange = responseHandler;
    httpRequest.open('POST', "/AjaxServ", true);
    httpRequest.send(dataForRequest);
}

function responseHandler() {
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            var line = httpRequest.responseText;
            alert(line);
        }
    }
}
public class ServletClass extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String contractor = req.getParameter("contractor");
        String contractNo = req.getParameter("contract-no");
        resp.setContentType("text/plain");
        PrintWriter out = resp.getWriter();
        out.write(contractor + "." + contractNo);
    }
}

它不应该是
'contractor='+document.getElementsByName('contractor')。value
而不是
'contract='+document.getElementsByName('contractor').value

httpRequest.open('POST',“/AjaxServ”,true)将不包括上下文路径。我的意思是,如果您在
http://localhost/project/testpage
如果您的帖子在
/AjaxServ
上,它将在
http://localhost/AjaxServ
因此,如果出现404错误,您可以使用Firebug(网络)或任何工具来查看HTTP请求