AJAX请求中的JSON对象为Null或空
Null or empty JSON object from AJAX request
最终删除了我之前发布的另一个与此相关的问题,因为它已经过时,还有另一件事需要解决。下面的答案非常清楚,比其他答案更清楚,我相信这对其他有类似困惑的人会有所帮助。
本质上,我想在Java中使用一个来自客户端JS的String。下面的JS警报工作正常,但是我的JSON对象在Servlet中为null或为空。我真的只需要把一个字符串传递给servlet,这样我就可以运行SQL查询,但我遇到了很多麻烦
谢谢!
html文件
<div class="jumbotron" id="jumboframe">
<h1>Enter your URL below</h1>
<input class="txtUrl" type="text" id="txtUrl" value="...." onfocus="if(this.value == '....') { this.value = ''; }"/>
<p><a class="btn btn-lg submitButton" href="testpage.html" onclick="getURL()" role="button">Start searching!</a></p>
</div>
<script>
function getURL() {
var urlString = document.getElementById("txtUrl").value;
var params = {url: urlString};
$.ajax({
type: "POST",
url: "testpage.html",
contentType: "application/json",
dataType: "text", // "JSON" here doesn't call alerts below
data: {
'url': urlString
},
success: function(data) {
alert("did it!");
alert(JSON.stringify(params));
alert(JSON.stringify(data));
}
});
}
</script>
Java servlet
public class JavaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
StringBuilder builder = new StringBuilder();
BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
out.println(builder.toString());
String url = request.getParameter("url");
Map<String, String[]> map = request.getParameterMap(); // empty {}
out.println(map.toString()); // null
out.println(url); // null
web.xml
<servlet>
<servlet-name>JavaServlet</servlet-name>
<servlet-class>path.to.my.JavaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JavaServlet</servlet-name>
<url-pattern>/testpage.html</url-pattern>
</servlet-mapping>
再次感谢
如果您想从请求数据中获得Json,那么您应该将其作为字符串传递,然后,您的html可能看起来像这样(我已经将servlet路径更改为JavaServlet.do)
<div class="jumbotron" id="jumboframe">
<h1>Enter your URL below</h1>
<input class="txtUrl" type="text" id="txtUrl" value="...." onfocus="if(this.value == '....') { this.value = ''; }"/>
<p><a class="btn btn-lg submitButton" href="#" onclick="getURL()" role="button">Start searching!</a></p>
</div>
<script>
function getURL() {
var urlString = document.getElementById("txtUrl").value;
var params = {url: urlString};
var jsonDataStr = JSON.stringify(params); // Here you get the json String
$.ajax({
type: "POST",
url: "JavaServlet.do",
contentType: "application/json",
dataType: "text", // "JSON" here doesn't call alerts below * Because the servlet thrown an error, you should handle it *
data: jsonDataStr,
success: function(data) {
alert("Your URL is " + data); // **get the response text**
alert("Handle it");
},
error: function(data) { // Handle the error
alert(data.error().getResponseHeader());
}
});
}
</script>
现在,JavaServlet将接收一个Json作为String,您必须解析它(使用像Gson这样的第三方库)。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
StringBuilder builder = new StringBuilder();
BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
String jsonString = builder.toString(); // get the json from client
UrlDto urlDto = new Gson().fromJson(UrlDto.class,jsonString); // parse you json to Java object
String yourUrl = urlDto.getUrl();
out.print(yourUrl); // **Set the response text**
out.close();
WEB.XML和URLDto
class UrlDto {
private String url;
// G&S ...
}
<servlet>
<servlet-name>JavaServlet</servlet-name>
<servlet-class>servlet.JavaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JavaServlet</servlet-name>
<url-pattern>/JavaServlet.do</url-pattern>
</servlet-mapping>
我希望这能帮助你
相关文章:
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- React.createElement:类型不应为null或未定义
- 对象为null或IE9中存在未定义错误
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- Microsoft JScript运行时错误:无法获取属性'的值;样式':对象为null或未定义
- 如何在jsrender中检查数组null或为空
- global.getElementById('..')为null或不是对象
- IE8错误:为null或不是对象,但仍然可以跟踪/控制台注销
- AJAX请求中的JSON对象为Null或空
- Highcharts无法设置属性'的值;要点':对象为null或未定义
- ui.selectmenu投掷'this.newelement.0'为null或不是对象
- 无法获取未定义或空引用的属性“new_textholder”
- 我一直得到“无法获得未定义或空引用的属性'长度'”
- IE错误:无法设置属性'的值;样式':对象为null或未定义
- moment:Array.prototype.some在null或未定义时被调用
- 错误:“null”为空或不是IE8中的对象,而不是Chrome或Firefox
- 如何使templateUrl为null或未定义或空字符串的指令
- 当属性src为null或为空时,.prp('src')为什么返回错误的值
- Javascript循环并过滤掉null或空的数据
- 为通用分析中的用户ID传递null或空字符串