【发布时间】: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) }?