在我的ASP.Net Web Api 2应用程序中,当我点击提交按钮时,我使用AJAX帖子将注册表单数据发送到服务器。
function click_form() {
var formData = JSON.stringify({
Name: $('#regInputName').val(),
SecondName: $('#regInputLastName').val(),
Email: $('#regInputEmail').val(),
Username: $('#regInputUsername').val(),
Password: $('#regInputPassword').val(),
Contact: $('#regInputContact').val(),
});
$.ajax({
url: '/api/Account/registration',
method: 'POST',
data: formData,
contentType: 'application/json;charset=utf-8',
dataType: 'json',
cache: false,
success: function () {
alert("Success");
},
error: function () {
alter('Error');
}
});
}
这是我的Web Api控制器,如果用户名不存在,我将重新启动HttpStatusCode.OK,如果用户名已经存在,则返回HttpStatusCode.NotFound。
[HttpPost]
[Route("api/Account/registration")]
public HttpResponseMessage registration([FromBody] UserRegModel user)
{
if (!usernames[0].Contains(user.Username))
{
User u = new User(){/*....*/}
/*... updating database ... */
HttpContext.Current.Session["user"] = u;
return new HttpResponseMessage(HttpStatusCode.OK);
}
return new HttpResponseMessage(HttpStatusCode.NotFound);
}
我的控制器每次返回OK或NotFound但Ajax事件成功和错误永远不会被触发。
有人知道这是什么问题吗?
答案 0 :(得分:0)
usernames
的列表/数组很可能不包含已发布的值。
这将导致404状态代码由ajax设置中的错误回调处理。
但是,在错误回调中,您有一个alter()
应该是alert()
的typeo,如果您更改了,那么很可能会显示错误消息。
答案 1 :(得分:0)
我发现了一些问题 -
type: 'POST'
代替method: 'POST'
dataType: 'json'
。否则,将调用错误函数而不是成功。修正:
<button type="button" onclick="click_form()">Post Form via Ajax</button>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
function click_form() {
var formData = JSON.stringify({
Name: 'John Doe',
SecondName: 'Jonny',
Email: 'johndoe@example.com',
Username: 'johndoe',
Password: '123456',
Contact: 'Jannet Doe'
});
$.ajax({
url: '/api/Account/registration',
type: 'POST',
data: formData,
contentType: 'application/json;charset=utf-8',
cache: false,
success: function (result) {
console.log(result);
},
error: function (result) {
console.log(result);
}
});
}
</script>
如果您使用Web API 2,则可以使用Ok()
和NotFound()
,并返回IHttpActionResult
。与旧方法相比,它更清晰,易读。
[HttpPost]
[Route("api/Account/registration")]
public IHttpActionResult Registration([FromBody] UserRegModel user)
{
if (!usernames[0].Contains(user.Username))
{
...
return Ok();
}
return NotFound();
}
仅供参考: 我测试了上面的代码,它运行正常。因此,在您完成复杂的业务逻辑之前,请尝试返回Ok()
以确保Ajax正常工作。