Jquery 安圭拉酒店;Ajax post-如何获得Ajax错误(而不是成功)回调以触发

Jquery 安圭拉酒店;Ajax post-如何获得Ajax错误(而不是成功)回调以触发,jquery,ajax,angularjs,asp.net-web-api,http-post,Jquery,Ajax,Angularjs,Asp.net Web Api,Http Post,我对ajax有点陌生,所以请原谅我的无知 在AngularJs中,我写了一篇ajax文章,如下所示: $.ajax({ url: "http://localhost:65337/api/Account/Register", type: "POST", beforeSend: function (request) { request.set

我对ajax有点陌生,所以请原谅我的无知

在AngularJs中,我写了一篇ajax文章,如下所示:

            $.ajax({
                url: "http://localhost:65337/api/Account/Register",
                type: "POST",
                beforeSend: function (request) {
                    request.setRequestHeader("Authorization", "Bearer " + $scope.authToken);
                    request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                },
                datatype: "json",
                data: JSON.stringify(postObj)
            }).error(function (data, status, error) {
                $scope.$emit('MESSAGE', data.Message, data.IsError);
            }).success(function (xmlHttpRequest, status, error) {
                // this callback fires even on server error code 500
            })
当我在服务器上遇到内部错误时,我正试图启动上述错误回调,当服务器遇到错误时,我发送以下响应:

        var response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
        ErrorTModel data = new ErrorTModel(msg, IsError);

        response.Content = new StringContent(
            JsonConvert.SerializeObject(data,
            Formatting.Indented,
            new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }),
            Encoding.UTF8,
            "application/json"
            );

        return response;

我已经阅读了在谷歌上找到的关于这件事的所有信息,因此非常感谢您的帮助。

我不确定您使用c#代码想要实现什么。要触发错误回调(出于测试目的),最简单的方法是在c#代码中抛出异常:


请参考javascript第9行的
postObj
,从正在发布的数据中省略所需的键/值对。我假设在向帐户注册端点过帐时需要全部或部分信息。

而不是

return new HttpResponseMessage(HttpStatusCode.InternalServerError);
创建并返回以下内容:

return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new Exception("Test"));

任何$Ajax或$http方法的.error回调都将启动

强烈建议不要将jQueryAjax api与angular混合使用。你真的只想在angular应用程序中使用jQuery来处理angular不支持的东西,你必须抛出HTTP错误代码@charlietfl感谢您的提醒,经过一些研究,您是指$http而不是$ajax吗?@OverMars是的。当您使用angular之外的代码执行修改范围的操作时,每次都必须通知angular。更难测试,而且在angular已经有了重构工具的情况下,这样做毫无意义,thnx!你能给出一些你的意思的示例代码吗?OP不应在其
帖子中包含哪些数据?OP如何触发
错误
回调?在本例中,使用解释性代码进行回答有助于了解错误发生的位置。我指的是第9行的
postObj
变量,它是发布到
/api/Account/Register
的数据。我不确定该对象包含什么,但我假设它有一个名称、密码或用于注册帐户的其他数据,并且我认为该对象中至少需要一个键/值对。因此,请忽略一个。这可能会拒绝我对服务器的呼叫,或者在服务器端抛出一个错误,我正在尝试反转流程。当服务器端抛出错误时,我想将该消息转发给用户在c#代码中。我们在工作中使用Django Rest Framework/angular,在DRF视图集中引发异常会触发故障回调(我们通常使用angular的
$resource
),这就是我建议我做的事情的原因。在我的情况下有效。:-)好运气@RachelHathaway,你的建议帮我找到了我需要的东西。
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new Exception("Test"));