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 楼答案
所以在我发布更新之后,我进一步研究并最终解决了它,问题是内容类型在servlet和JS/ajax中都设置为application/json(这是正确的),但我希望alertbox中会弹出一个字符串,因此除了servlet中更新的代码之外,我在ajax中更改了这一行:
来自
至
感谢所有的回复和评论,他们都很有帮助