2

これを行う方法に関するいくつかの投稿をここで読みましたが、途中でしか機能しません。

これは機能します(jsonオブジェクトをテキストとして送信します):

            function go(itemid)
            {
                apiRoutes.controllers.Application.addItem(itemid).ajax({
                    data:  '{"reqid":0,"iid":2,"description":"adsf"}',
                    dataType:  'text',
            contentType:'application/json',
                    success: function(reply) {
                        alert(reply)
                    }
                });
            }

これはしません(オブジェクトをjsonとして送信します):

            function go(itemid)
            {
                apiRoutes.controllers.Application.addItem(itemid).ajax({
                    data:  {"reqid":0,"iid":2,"description":"adsf"},
                    dataType:  'text',
            contentType:'application/json',
                    success: function(reply) {
                        alert(reply)
                    }
                });
            }

そして、私が本当にやりたいことは、次のようなものです (適切なコンビネータを既にセットアップしています)。

            function go(itemid)
            {
                apiRoutes.controllers.Application.addItem(itemid).ajax({
                    data:  @Html(Json.stringify(Json.toJson(item))),
                    dataType:  'text',
            contentType:'application/json',
                    success: function(reply) {
                        alert(reply)
                    }
                });
            }

私のコントローラーは次のようになります。

  def addItem(id: Long) = Action (parse.json) { implicit request =>
    Logger.info("add item")
    request.body.validate(Item.itemReads).map { item =>
    thing.addItem(item)
    Ok("Succesfully added item.")
    }.recoverTotal{
      e => BadRequest("Detected error:"+ JsError.toFlatJson(e))
    }
  }

2 番目のケースでは、ログ コードに到達しません。代わりに、すぐに 400 Bad Request を返します (これはおそらく Action (parse.json) ビットでトリガーされたものだと思います)。

オブジェクトをjsonとして送信したいのは、文字列に変換すると、説明にアポストロフィ( ')が含まれているため、混乱します。おそらくアポストロフィをエスケープできますが、文字列ではなくオブジェクトを使用してこれを行う方法について簡単なことを見逃していることを願っています。

ありがとう

4

2 に答える 2

1

APIで説明されているように、dataTypeパラメーターは設定用です。

サーバーから返されるデータの種類。

json を送信するには、2 番目の方法を使用します (文字列として送信しないでください)。Web ブラウザー インスペクターを使用して、正しいデータが送信されたかどうかを検証します。私の知る限り、有効なJSONオブジェクトを受け取った後のJSONリクエストの処理に問題はないはずです

于 2013-08-24T18:00:51.970 に答える