gpt4 book ai didi

javascript - 为什么 MVC ajax onSuccess 函数即使状态码是 302 也会被触发

转载 作者:行者123 更新时间:2023-11-28 16:09:29 24 4
gpt4 key购买 nike

我有一个 ajax 表单,其中定义了一些 ajaxOptions 变量并将其传递给 Ajax.BeginForm:

var ajaxOptions = new AjaxOptions
{
HttpMethod = "POST",
LoadingElementId = "loading",
OnBegin = "Base.loadingButton('#RegisterSubmit');",
OnSuccess = "Register.onSuccess",
OnFailure = "Base.onError"
};

所有 JavaScript 函数都在特殊的命名空间中定义,例如 BaseRegister...。

现在,当表单提交并在服务器中出现错误,代码:“0”和类型:“Sql”,并使用 elmah 进行记录,状态代码:从服务器返回“HTTP/1.1 302 Found”。

问题1:
OnSuccess 函数即使在返回状态 302 的情况下也始终会触发(但 OnSuccess 仅在状态码为 200 时才必须触发!!!),为什么?

问题2:
有时 OnSuccess 函数即使状态码是 200 也不会触发!!!,为什么?

最佳答案

Question 1: OnSuccess function fired always even at this case which status 302 returned(but OnSuccess only must fire when status code is 200!!!),why?

这是因为当您对重定向的服务器端脚本(状态代码 302)执行 AJAX 请求时,AJAX 会遵循重定向到目标位置并最终以状态代码 200 => 触发 OnSuccess,因为该请求成功了。您对此无能为力 - 这就是 AJAX 的工作原理 - 您无法拦截 302 状态代码。

您是否使用它来检测重定向到登录页面的情况?万一 session 过期什么的?处理这种情况的正确方法是使用服务器的 401 状态代码并在 OnFailure 方法中检测此事件。为了防止 FormsAuthentication 模块重定向到登录页面,而是发送 401 状态代码,您可以查看 following article .

Question 2: sometimes OnSuccess function never fire even status code is 200!!!,why?

如果状态代码为 200,OnSuccess 应始终触发,除非出现一些 JavaScript 错误。

关于javascript - 为什么 MVC ajax onSuccess 函数即使状态码是 302 也会被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13525353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com