【发布时间】:2013-06-19 18:08:36
【问题描述】:
我正在尝试将一些数据发布到我的 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 控制器工作正常,但让我不知道为什么它不能在单击按钮或提交表单时工作并进入“错误”而不是“成功”。
我在我的方法中没有发现任何错误,如果有人能在表单发布时帮助我获得回复,我会很高兴。
【问题讨论】:
-
你为什么使用
complete回调?那个用于成功 和 错误。无论如何(没有双关语),现在最好使用延迟的.done、.fail和.always -
您也可以尝试使用 $.post() - 这是 $.ajax() 的简写方法,专门用于发布操作。
-
@Alnitak,不错。我刚刚删除了完整的回调,我的代码现在正在运行。虽然我记得以前它在我阅读了一些关于尝试打印错误消息的答案后完成之前没有工作。但我想我当时没有正确地调用成功,因为我没有争论就调用它 - 不确定这是原因还是其他错误。感谢您查看这个。 :)
-
@SurrealDreams 我第一次尝试使用 $.post,然后当它不工作时我尝试了 $.ajax,现在删除后完成它的工作
-
很好,很高兴你能理解。 @Alnitak,您应该将其发布为答案,以便 sstaq 可以接受。
标签: javascript jquery ajax asp.net-mvc-4 asp.net-web-api