java - Servlet 偶尔从 Javascript XHR 获取空白数据

标签 java javascript ajax servlets

我正在从 Javascript 向 servlet 发送一些参数。有时,servlet 会接收一组 null 参数(通过 servlet 代码开头的 System.out.println() 检查)。
然而,在调用 XHR.send 之前,参数在 Javascript 中正确生成(通过 console.log() 检查)

其他背景:
该 Servlet 从一些数据文件生成电子表格,因此有时可能会有点密集。

示例代码

web.xml:

<servlet>
    <description>Export Servlet</description>
    <display-name>ExportServlet</display-name>
    <servlet-name>ExportServlet</servlet-name>
    <servlet-class>testpkg.ExportServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ExportServlet</servlet-name>
    <url-pattern>/ExportServlet</url-pattern>
</servlet-mapping>

JAVASCRIPT:common.js: 函数 sendDataToServer(参数...) {

    // ... Some Code...
    var params = "param1=" + value1 + "&param2=" + value2;
    console.log(params); // This works perfectly!

    // AJAX Code
    var xmlhttp;
    // Handling browsers
    if (window.XMLHttpRequest)
    {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function()
    {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            // MARKER 1.0
            alert("Success");
        }
    };
    xmlhttp.open('POST', 'ExportServlet', false);
    xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded;charset=UTF-8');
    console.log(params); // This works perfectly!
    // Sending data...
    xmlhttp.send(params); 
}

SERVLET:ExportServlet.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException 
{
    // Init Code...
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
    request.setCharacterEncoding("UTF-8");
    try
    {
        // Get paramaters
        String sParam1 = request.getParameter("param1");
        String sParam2 = request.getParameter("param2");
        // Test print params...
        System.out.println("Param1 Value = " + sParam1); // Occasionally NULL
        System.out.println("Param2 Value = " + sParam2); // Occasionally NULL

        // More Code...
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

注意 空参数不是由于数据问题造成的,因为我在几分钟前工作的完全相同的数据用例中遇到了此错误。通常,当重复执行相同的步骤时,这种情况会随机发生。

知道为什么会发生这种情况吗?

最佳答案

尝试

xmlhttp.open("POST","ExportServlet?param1=" + value1 + "&param2=" + value2,true);
xmlhttp.send();

而不是

xmlhttp.open('POST', 'ExportServlet', false);
xmlhttp.send(params);

或者您可以使用 JQUERY AJAX

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script>
function sendDataToServerWithJquery(value1,value2) {
    var params ={"param1":value1,"param2":value2};
    /*
    OR
    var params = "param1=" + value1 + "&param2=" + value2;
    */

             $.ajax({type: "POST",
            url:"ExportServlet",
            data:params,
            success:function(result){
            alert("Success");
            }
          });
}
</script>
<form action="ExportServlet">

<input type="button" onclick="sendDataToServerWithJquery('P1','P2')" value="Submit Values">

</form>

注意:使用 input type="button" 而不是 input type="submit" Refer

关于java - Servlet 偶尔从 Javascript XHR 获取空白数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647610/

相关文章:

java - 如何将输入句子的每个字母大写? ( java 语)

java - 在没有应用程序服务器的情况下使用数据源

javascript - 等效于 JavaScript 中的 C extern 声明

javascript - JSON 和 Highcharts

javascript - 当部分 View 中的ajax调用完成时,如何在主机MVC页面上调用javascript?

java - 在 servlet 中处理图像

java - 捕获从构造函数的 cflow 内进行的调用

javascript - 将 JSON(jQuery) 发送到 PHP 并对其进行解码

javascript - 在 JavaScript 函数中引用表格中的左侧单元格

javascript - Ajax post发送嵌套数组,未定义