ajax json playframwork解析器无法获得对应的值

时间:2014-05-24 11:24:40

标签: ajax json scala playframework-2.0 playframework-2.2

我的框架是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?

2 个答案:

答案 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请求所需的全部内容。