我正在尝试将一些数据发布到我的ASP.Net MVC Web API控制器并尝试将其恢复到响应中。我有这个帖子的以下脚本:
$('#recordUser').click(function () {
$.ajax({
type: 'POST',
url: 'api/RecordUser',
data: $("#recordUserForm").serialize(),
dataType: 'json',
success: function (useremail) {
console.log(useremail);
},
error: function (xhr, status, err) {
},
complete: function (xhr, status) {
if (status === 'error' || !xhr.responseText) {
alert("Error");
}
else {
var data = xhr.responseText;
alert(data);
//...
}
}
});
});
这个脚本的问题在于,每当我尝试发布数据时,jQuery都会以“错误”而不是“成功”的形式返回。
我确保我的控制器没问题。无论何时发出请求,我都可以在调试模式下进入我的api方法,并且可以看到它从POST请求中获取数据并将其返回。这个控制器非常简单:
public class RecordUserController : ApiController
{
public RecordUserEmailDTO Post(RecordUserEmailDTO userEmail)
{
return userEmail;
}
}
我不知道如何让jQuery打印出任何有用的错误消息。目前,当我尝试使用Chrome控制台调试jQuery代码时,它会显示一个空的xhr.responseText,“err”对象和“status”中的任何内容都设置为“error”,如您所见,这并不是很有帮助。
我尝试过的另一件事是直接从控制台运行以下代码:
$.ajax({
type: 'POST',
url: 'api/RecordUser',
data: {"Email":"email@address.com"},
dataType: 'json',
success: function (useremail) {
console.log(useremail);
},
error: function (xhr, status, err) {
console.log(xhr);
console.log(err);
console.log(status);
alert(err.Message);
},
complete: function (xhr, status) {
if (status === 'error' || !xhr.responseText) {
alert("Error");
}
else {
var data = xhr.responseText;
alert(data);
}
}
});
即。使用相同的脚本而不实际单击按钮并提交表单。令人惊讶的是,这回复了正确的响应,我可以在控制台中看到我的数据打印出来。对我来说,这至少意味着我的Web API控制器工作正常,但我不知道为什么它没有工作单击按钮或提交表单并进入“错误”而不是“成功”。
我未能在我的方法中发现任何错误,如果有人可以帮助我在发布表单时收到回复,我会很高兴。
答案 0 :(得分:-1)
根据Alnitak的建议,我正在使用complete
回调以及success
和error
回调。从我的代码中删除complete
修复了问题。
感谢Alnitak。