【问题标题】:AngularJS http sending post request failsAngularJS http发送post请求失败
【发布时间】:2013-11-12 20:28:39
【问题描述】:

有了这个 GET 请求,它就可以工作了(将请求发送到服务器并且服务器能够处理它):

    /* post to server*/
    $http.get("/forms/FormValidator1/validateForm/" + JSON.stringify(data)).
        success(function(data) {
            console.log("good")
        }).
        error(function(data, status, headers, config) {
            console.log("something wrong")
        })

当我使用这个 POST 请求时它没有。

 $http.post("/forms/FormValidator1/validateForm/" + JSON.stringify(data)).
                success(function(data) {
                    console.log("good")
                }).
                error(function(data, status, headers, config) {
                    console.log("something wrong")
                })

或以不同的形式写作:

           $http({
                url: '/forms/FormValidator1/validateForm',
                method: "POST",
                data: JSON.stringify(data),
                headers: {'Content-Type': 'application/json'}
            }).success(function (data, status, headers, config) {
                    console.log("good")
            }).error(function (data, status, headers, config) {
                    console.log("something wrong")
            });

我最后得到的是:

Request URL:http://localhost:9000/forms/FormValidator1/validateForm
Request Method:POST
Status Code:404 Not Found

请求的有效载荷是 json:{"name":"name1","surname":"surname1"}

在服务器(playframework)上,我定义了应该接受客户端调用的路由。

GET        /forms/FormValidator1/validateForm/:jsonForm           controllers.FormValidator1.validateForm(jsonForm:String)

POST        /forms/FormValidator1/validateForm/:jsonForm            controllers.FormValidator1.validateForm(jsonForm:String)

或者没有":jsonForm"

 POST        /forms/FormValidator1/validateForm            controllers.FormValidator1.validateForm(jsonForm:String)

可能是什么原因。我错过了什么?

更新

有趣的是:在我的笔记本电脑上运行后(请参阅下面的答案),然后将其推送到 gitHub 并将其拉到另一台机器上,它开始以不同的方式工作。现在它抱怨 Bad Request 是 [Invalid XML] 但是我使用 "application/json" 标头并且在提交后没有更改任何代码行。我想知道这可能是一个错误

似乎是DocumentType,我需要提供dataType : 'json',但由于Play 希望它出现在url 中。这一切都行不通。

【问题讨论】:

  • 在您的更新中,controllers.FormValidator1.validateForm 仍将jsonForm 作为参数。我认为那不会编译。
  • 它编译。你可以试试:github.com/Sergey80/angularjs-examples/blob/master/conf/routes 在那个版本中我现在已经评论过 POST。
  • 我知道,根据this answer,playframework 将假定jsonData 字段将出现在data 中。那么也许你在 POST 请求中的data 应该看起来像:data: {'jsonForm' : JSON.stringify(data) } ?

标签: angularjs playframework


【解决方案1】:

服务器配置接受以下形式的 URL 上的 POST 请求:/forms/FormValidator1/validateForm/:jsonForm

客户端 POSTing 到 is/forms/FormValidator1/validateForm/ 的 URL,不符合该格式(注意缺少的 :jsonForm)。

【讨论】:

  • 我想我的 'data' 代表那个 ':jsonForm'.. 这就是原因。如果我输入:“POST /forms/FormValidator1/validateForm”(没有 ':jsonForm')它也不会工作。
【解决方案2】:

我想出了一个与playframework 相关的答案,它解决了我/这个问题。

这里是: Playframework handling post request

请参阅此处的UPDATE 2部分。

重点是:

  1. 在 Angular 方面:构建 url 时根本不需要使用参数。使用data 的一般方法
  2. 在服务器端使用 Play'bodyParser 来提取数据,无论是作为请求正文传递的任何内容。

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多