Json 我正在发送Ok,但浏览器显示错误请求

Json 我正在发送Ok,但浏览器显示错误请求,json,playframework,Json,Playframework,我正在从HTML页面向播放服务器发送JSON。但是服务器代码的行为方式很奇怪。使用调试器,我可以看到服务器首先发送错误的请求-响应,然后它处理我的控制器消息并响应Ok 在图1中,我发送了一个请求,该图像有JSON的快照,我立即得到错误的请求响应,如图3所示。在图2中,控制器代码被执行(我假设在服务器发送坏请求之后),服务器发送另一个200 OK。我在JQuery中使用的内容类型是text/json。如果我使用application/json,我只会收到错误的请求消息,控制器代码根本不会执行 我怀

我正在从HTML页面向播放服务器发送JSON。但是服务器代码的行为方式很奇怪。使用调试器,我可以看到服务器首先发送错误的请求-响应,然后它处理我的控制器消息并响应Ok

在图1中,我发送了一个请求,该图像有JSON的快照,我立即得到错误的请求响应,如图3所示。在图2中,控制器代码被执行(我假设在服务器发送坏请求之后),服务器发送另一个200 OK。我在JQuery中使用的内容类型是text/json。如果我使用application/json,我只会收到错误的请求消息,控制器代码根本不会执行

我怀疑问题出在Json中

@(form:Form[User2])

<!DOCTYPE html>
<html lang="en" xmlns:font-variant="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-COMPATIBLE" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>HTML Test</title>
    <link rel="stylesheet" type="text/css" href="@routes.Assets.at("stylesheets/bootstrap.min.css")">

    <!--link rel="stylesheet" href="stylesheets/bootstrap-theme.min.css"-->
    <style type="text/css">

        html, body {
          height:100%;
          margin:0;padding:0
        }

        .center-form {
          width:100%;
          margin:auto;
          position:relative;
          top:50%;
          transform: translateY(-50%)
}


</style>

    <script src="@routes.Assets.at("javascripts/jquery-3.1.1.min.js")"></script>
    <script src="@routes.Assets.at("javascripts/bootstrap.min.js")"></script>


</head>
<body>

<div class="container center-form" >

    <!-- for medium and large screens,
    First row of Bootstrap grid contains logo. Total 3 columns (12/4). Logo in middle column-->

    <div class="row" >
        <!--empty column-->
        <div class="col-md-4 col-lg-4" ></div>

        <!--logo column-->
        <!--div class="col-md-4 col-lg-4" >
            <div>
                <img src="@routes.Assets.at("images/SalesWorkspaceLogo303x64.png")" alt="SalesWorkspace Logo" height="64" width="303">
            </div>
        </div-->
        <!--empty column-->
        <div class="col-md-4 col-lg-4"></div>
        </div>

    <!-- for medium and large screens,
    Second row of Bootstrap grid contains the form for username and password. Total 3 columns (12/4). -->
        <div class="row" >
            <!--empty column-->
            <div class="col-md-4 col-lg-4"></div>

            <!--form-->
            <div class="col-md-4 col-lg-4">

            <form id="registration-form" action="/newreg" method="post">
                    <div class="form-group">
                        <label for="first-name">First Name</label>
                        <input type="text" class="form-control" id="first-name" name="first-name" value="@form("name").value" required>
                    </div>

                    <div class="form-group">
                        <label for="last-name">Last Name</label>
                        <input type="text" class="form-control" id="last-name" name="last-name" value="@form("name").value" required>
                    </div>

                    <div class="form-group">
                        <label for="email">Email</label>
                        <input type="email" class="form-control" id="email" name="email" value="@form("email").value" required>
                    </div>
                    <div class="form-group">
                        <label for="password">Password</label>
                        <input type="password" class="form-control" id="password" name="password" required>
                    </div>
                    <div class="form-group">
                        <label for="confirm-password">Confirm password</label>
                        <input type="password" class="form-control" id="confirm-password" required>
                    </div>

                    <div class="form-group">
                        <label for="street-name">Street Name</label>
                        <input type="text" class="form-control" id="street-name" name="street-name" required>
                    </div>

                    <div class="form-group">
                        <label for="country">Country</label>
                        <input type="text" class="form-control" id="country" name="country" required>
                    </div>

                    <button type="submit" class="btn btn-primary">Sign Up</button>
                </form>
            </div>
            <!--empty column-->
            <div class="col-md-4 col-lg-4"></div>
        </div>
</div>
<script src="@routes.Assets.at("javascripts/myScripts.js")"></script>
</body>
</html>
myScripts.js

function objectifyForm(formArray) {//serialize data function

  returnArray = {};
  for (var i = 0; i < formArray.length; i++){
    returnArray[formArray[i]['name']] = formArray[i]['value'];
  }
  return returnArray;
}

$(document).ready(function(){
    // click on form submit
    $('#registration-form').on('submit',function(e){
    var details = JSON.stringify(objectifyForm($(this).serializeArray()));
    console.log(details)
        // send ajax
        $.ajax({
            url: '/newreg', // url where to submit the request
            type : "POST", // type of action POST || GET
            datatype : "json", // data type
            /* this doesn't work*/
            //contentType: "application/json; charset=utf-8",
            /*this does*/
            contentType: "text/json; charset=utf-8",
            data : details,
            success : function(result) {
                // you can see the result from the console
                // tab of the developer tools
                console.log(result);
            },
            error: function(xhr, resp, text) {
                console.log(xhr, resp, text);
            }
        })
    });
});
函数objectifyForm(formArray){//序列化数据函数
returnArray={};
对于(变量i=0;i


您忘记取消原始提交事件,所以您发送了两次表单。有一次,它只是一个普通的HTML表单,所以play会发回一个错误的请求。另一次使用javascript作为JSON,所以play处理它并返回200

只需向JS函数添加一个字符串

发件人:

$('#registration-form').on('submit',function(e){
致:

$('#registration-form').on('submit',function(e){
$('#registration-form').on('submit',function(e){
    e.preventDefault();  //prevent form from default submitting