有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript如何克服从AJAX发送到servlet的getParameter()的空值问题?

为了解决这个问题,我已经阅读了几乎所有关于堆栈溢出的答案,我尝试了很多方法,但仍然得到空值,我只是尝试从JS中的else语句中使用AJAX向servlet发送java脚本变量,如下所示,我在alertbox中得到null

else { //begin JS else
                    var somevar="iam the user";

                     $.ajax({
                        type:"POST",
                        url:"Register", 
                       dataType: 'json',
                       contentType:'application/json',

                        data:{
                        Subject:somevar},

                          cache: false,
                        processData:false,
                        success: function(data){
                            alert(data);
                        },
                        error: function(){
                            alert("error");
                        }


            });
} //end else

以及servlet(寄存器)中的doPost方法

 @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
             resp.setContentType("text/plain");  // Set content type of the response so that jQuery knows what it can expect.
            resp.setCharacterEncoding("UTF-8"); 
        String user = req.getParameter("Subject");
               //resp.sendRedirect("registration.jsp");
                PrintWriter out = resp.getWriter();
                    out.println(user);
                //String pathInfo = req.getRequestURI();


}

我尝试了很多不同的方法,但举几个例子:

1-如果我取消注释并使用这一行并注释其他行:resp.sendRedirect("registration.jsp");

然后我在alertbox中得到error作为响应

2-如果我将另一个字符串(不是用户值)作为响应从servlet发送回ajax,例如:out.println("some string"); 然后我在JS alertbox中得到了字符串

在我尝试过的其他事情中,很明显,值是从ajax成功地发送到servlet的,但是当服务器读取它时,它是空的,服务器可以将字符串响应发送回ajax(除了getparameter()值以外的任何变量),ajax得到的结果很好

有鉴于此,我尝试使用answerssuch as this answer执行一些处理步骤(提取servlet上的JSON元素)。但在我尝试了这个答案之后,警报框再次发出error

我知道还有其他使用http发送数据的方法(例如send()方法),但我发现ajax更好,因为我发送多个数据对象而不是一个(在我的示例中,它只是一个,但我将使用它发送多个数据元素)。 任何帮助都将不胜感激

更新:取得了一些进展,通过查看更多的答案,如this one,我能够修改答案和我的代码,并将它们组合在一起,还借助@stdunbar关于浏览器调试的评论(非常有用),我能够在浏览器中跟踪内容,现在问题几乎解决了,但还没有完全解决,现在我可以从请求中提取值并将其转换为字符串,但是当我将字符串发送回ajax(js)时,alertbox显示(error),但好消息是,浏览器调试器将响应显示为字符串,但alertbox无法显示,以下是我更新的servlet代码:

  @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

            PrintWriter out = resp.getWriter();

             StringBuilder sb = new StringBuilder();
    BufferedReader br = req.getReader();
    String str;
    while( (str = br.readLine()) != null ){
        sb.append(str);
    }    
    try{
    JSONObject jObj = new JSONObject(sb.toString());
    String extracted=jObj.getString("Subject").toString();
   resp.setContentType("application/json");
   resp.setCharacterEncoding("UTF-8"); 
   // resp.setContentType("text/plain");  // Set content type of the response so that jQuery knows what it can expect.
   // resp.setCharacterEncoding("UTF-8"); 
     out.println(jObj);
    }catch (JSONException e) {
    }


    }

还有我的AJAX:

else { //begin JS else 
           var somevar="iam the user";

                 $.ajax({
                     type:"POST",
                     url:"Register", 
                    dataType: 'json',
             contentType:'application/json',
                data:JSON.stringify({Subject:somevar}),


                      cache: false,
                    processData:false,
                    success: function(data){
                        alert(data);
                    },
                    error: function(){
                        alert("error");
                    }


        });

            } //end JS else

共 (1) 个答案

  1. # 1 楼答案

    所以在我发布更新之后,我进一步研究并最终解决了它,问题是内容类型在servlet和JS/ajax中都设置为application/json(这是正确的),但我希望alertbox中会弹出一个字符串,因此除了servlet中更新的代码之外,我在ajax中更改了这一行:

    来自

    alert(data); // this line trying to get the json object (wrong)
    

     alert(data.Subject); // this line is getting the value of the key (correct)
    

    感谢所有的回复和评论,他们都很有帮助