我正在从客户端发送ajax请求,例如:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
$(document).ready(function() {
$.ajax({
url: "http://192.168.1.74:8888",
type: "POST",
data: ({username: 'Bobby'})
});
})
</script>
</head>
<body>
</body>
</html>
我的Http Server是用Java编写的,利用vertx是这样的:
public class Main extends AbstractVerticle {
@Override
public void start() throws Exception {
vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
@Override
public void handle(HttpServerRequest request) {
System.out.println(request.getParam("username"));
}
}).listen(8888);
}
}
每次运行客户端时,服务器都会写入控制台,以便发送请求,但服务器说该值为null。我究竟做错了什么?如何读取从客户端发送的POST参数?
更新
我发现了问题,但没有解决方法。如果我从POST将ajax更改为GET,则会出现。我如何使它适用于POST而不是GET?那与现在发生的情况相反?
干杯
答案 0 :(得分:3)
我在处理项目时遇到了问题。我在客户端使用Dojo。我通过在客户端和服务器端进行调整来解决这个问题。
客户端:
var json = JSON.stringify({
"username": "Bobby"
});
request.post("yoururl", {
data: json,
headers: {
"Content-Type": "application/javascript"
}
});
在服务器端,显然,在处理代码之前,需要调用方法 BodyHandler.create()。
router.route(HttpMethod.POST, "yoururl").handler(BodyHandler.create());
router.route(HttpMethod.POST, "yoururl").handler(routingContext ->
{
String sectionType = routingContext.request().getParam("sectionId");
JsonObject j = routingContext.getBodyAsJson();
});
我希望这可以解决你的问题。
答案 1 :(得分:2)
数据:{&#34;用户名&#34;:&#39; Bobby&#39;}将解决您的问题,并删除()您也可以尝试在jquery中更改您的ajax请求,如下所示
var datavar = {username:"someusername"}; //Array
$.ajax({
url : "AJAX_POST_URL",
type: "POST",
data : datavar,
success: function(data, textStatus, jqXHR)
{
alert("success") ;
},
error: function (jqXHR, textStatus, errorThrown)
{
alert("fail") ;
}
});
答案 2 :(得分:2)
执行POST请求时,数据位于正文中。 在服务器端,您需要为路由器注册一个正文处理程序,以便能够轻松地从请求中获取正文。你可以这样做:
final Router router = Router.router(vertex);
// Adding a BodyHandler for routes
router.route().handler(BodyHandler.create());
router.post("/your/endpoint").handler(routingContext -> {
System.out.println(routingContext.getBodyAsString());
});
另一种选择是添加另一个回调处理程序,如下所示:
final Router router = Router.router(vertex);
router.post("/your/endpoint").handler(routingContext -> {
routingContext.request().bodyHandler(body -> {
System.out.println(body.toString());
});
});