Javascript 如何在jQuery中处理POST请求的响应

Javascript 如何在jQuery中处理POST请求的响应,javascript,jquery,ajax,asp.net-mvc-4,asp.net-web-api,Javascript,Jquery,Ajax,Asp.net Mvc 4,Asp.net Web Api,我正在尝试将一些数据发布到我的ASP.NETMVCWebAPI控制器,并尝试在响应中获取这些数据。我为这篇文章准备了以下脚本: $('#recordUser').click(function () { $.ajax({ type: 'POST', url: 'api/RecordUser', data: $("#recordUserForm").serialize(), dataType: 'json', success: function (use

我正在尝试将一些数据发布到我的ASP.NETMVCWebAPI控制器,并尝试在响应中获取这些数据。我为这篇文章准备了以下脚本:

 $('#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都会返回“error”而不是“success”

我已确保我的控制器没有问题。无论何时发出请求,我都可以进入调试模式下的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);
        }
    }
});
i、 e.使用相同的脚本,而不实际单击按钮并提交表单。令人惊讶的是,这返回了正确的响应,我可以看到我的数据在控制台中打印出来。对我来说,这至少意味着我的Web API控制器工作正常,但我不知道为什么它在单击按钮或提交表单时不工作,并进入“错误”而不是“成功”


我在我的方法中没有发现任何错误,如果有人能在表单发布时帮助我获得回复,我将非常高兴。

正如Alnitak所建议的,我使用了
complete
回调以及
success
error
回调。从我的代码中删除
complete
修复了该问题


感谢Alnitak。

为什么要使用
complete
回调?那一个用于成功和错误。无论如何(不是双关语),现在最好使用延迟
.done
.fail
。始终
您也可以尝试使用$.post()-这是$.ajax()的一种简写方法,专门用于后期操作。@Alnitak,很好。我刚刚删除了完整的回调,我的代码现在可以工作了。虽然我记得以前,在我阅读了一些答案之后,在打印出错误消息之前,它是不起作用的。但我想当时我并没有正确地称之为成功,因为我是在没有争论的情况下称之为成功的——我不确定这是原因还是其他什么地方出了问题。感谢您对此进行调查。:)@我第一次尝试使用$.post的超现实流,然后当它不起作用时,我尝试了$.ajax,现在在删除它之后,完成它的工作。很好,我很高兴你找到了它@Alnitak,你应该把它作为一个答案发布,这样sstaq就可以接受了。