AngularJS http发送帖请求失败

时间:2013-11-12 20:28:39

标签: angularjs playframework

有了这个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并将其拉到另一台机器上,它开始以不同的方式工作。现在它抱怨错误请求是[无效的XML]然而我使用"application/json"标头并且在提交后没有更改任何代码行。我想知道这可能是 bug

似乎DocumentType,我需要提供dataType : 'json',但是因为Play想要它在网址中。这一切都行不通。

2 个答案:

答案 0 :(得分:1)

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

客户端 POSTing 的网址为/forms/FormValidator1/validateForm/,不符合该格式(请注意缺少:jsonForm)。

答案 1 :(得分:1)

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

这是: Playframework handling post request

请参见更新2 部分。

重点是:

  1. 在Angualar方面:建立网址时根本不需要使用参数。只是使用data
  2. 的一般方法
  3. 在服务器端使用Play'bodyParser提取数据,无论是作为请求体传递的数据。