【发布时间】:2012-10-31 22:05:13
【问题描述】:
我有一个 Java JAX-RS REST 服务器和一个 HTML 页面。
我想通过 xmlhttp POST 请求从 HTML 页面发送一个 JSON 数组、一个用户名和一个 accountID,方法是将它们全部设为一个大字符串,以便我可以使用 xmthttp.send() 方法。
HTML发送代码为:
function sendData() {
var req = createRequest();
var postUrl = "rest/hello/treeData";
var dsdata = $("#treeview").data("kendoTreeView").dataSource.data();
var accID = "onthespot";
var username = "alex";
req.open("post", postUrl, true);
req.setRequestHeader("Content-type","text/plain");
req.send("data=" + JSON.stringify(dsdata) + "&username=" + username + "&accID=" + accID);
req.onreadystatechange = function() {
if (req.readyState != 4) {
return;
}
if (req.status != 200) {
alert("Error: " + req.status);
return;
}
alert("Sent Data Status: " + req.responseText);
}
}
而服务器 JAX-RS 代码是:
@Path("/treeData")
@POST
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public String storeTreeData(
@QueryParam("data") String data,
@QueryParam("username") String username,
@QueryParam("accID") String accID) {
System.out.println("Data= " + data + "\nAccID= " + accID + "\nUsername= " + username);
return "Done";
}
问题是所有变量都打印为null..
storeTreeData 函数应该通过 @QueryParam 找到 data 、 username 、 accID 变量并存储它们不是吗?
有人知道这里有什么问题吗?
PS:xmlhttp请求初始化正确并建立连接,但参数未在服务器上传递。
【问题讨论】:
-
req.send是设置URL的查询还是请求的正文? -
req.send()将请求数据发送到服务器,我猜是正文。 -
我喜欢你的问题。它让我了解了表单参数在 JAX-RS 中的工作原理。
标签: java javascript xmlhttprequest jax-rs