我的框架是playframework2.2.2。 我使用jquery发送ajax json: 我的javascript(客户端)部分:
$("#newapply" ).click(function(){
var htmlrespone=$.ajax({
type : 'post',
url : ' @routes.CommonController.postdata ',
data : JSON.stringify({"userid": "111233456"}),
sucess:function(){
$("#newapply" ).html("already apply");
$("#newapply" ).prop("enable",false);
},
contentType: 'appliction/json'
});
})
我的firebug中的帖子字符串是:
{"userid":"111233456"}
我的服务器部分收到的帖子是:
def postdata = Action { request =>
val body: AnyContent = request.body
val textBody: Option[JsValue] = body.asJson //here I always get None I donot know why
textBody.map{json=>
Ok("Got:"+(json\"userid").as[String])
}.getOrElse{
BadRequest("Expecting text/plain request body")
}
}
这里我总是得到BadRequest,因为getOrElse语句总是没有。 我认为帖子应该是json对象或JsValue。 但为什么我在这里没有?如何从身体获取JsValue?
答案 0 :(得分:1)
我认为,你不能简单地在ajax数据中传递请求正文数据。
在ajax数据中,只需传递带有值的变量,就像这样
var reqData=JSON.stringify({"userid": "111233456"})
$.ajax({
type : 'post',
url : ' @routes.CommonController.postdata() ', //add proper function brackets after postdata
data : {"data",reqData},
sucess:function(){
$("#newapply" ).html("already apply");
$("#newapply" ).prop("enable",false);
}
});
(抱歉,我只知道java不scala)
在路线文件中,只需像这样添加
controllers.CommonController.postdata(data: String ?="")
并在您的控制器中,只需这样做
public static Result postdata (String data) {
//do your stuff
}
希望这会有所帮助。
答案 1 :(得分:0)
您的应用程序/ json拼写错误。字段contentType: 'application/json'
应该是发送json请求所需的全部内容。