Jquery 安圭拉酒店;Ajax post-如何获得Ajax错误(而不是成功)回调以触发
我对ajax有点陌生,所以请原谅我的无知 在AngularJs中,我写了一篇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({
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"));