问题摘要
通过表单身份验证使用 Chrome 登录后,landing 页面作为 returnUrl 会导致我的 jQuery ajax 出错,但没有与服务器连接。状态码为0
,消息为"error"
。(几乎没用)。尝试过 Firefox,无法复现该问题,我开始觉得 Chrome 是问题所在。清除缓存、关闭和重新打开并不能解决问题。最接近的文章是这篇:jQuery Ajax - Status Code 0? 但是,URL 是相对的,/Test
。
另一篇文章:jquery ajax problem in chrome
详细描述
我在 jQuery ajax 中遇到了一个错误。似乎是在使用表单身份验证登录后,着陆页面(returnUrl)会出现 JS 错误。然后刷新页面(F5),脚本就能正常工作(大多数情况下)。即使不使用 F5,在使用链接导航到相同的页面时,JS 也会正常工作(大多数情况下)。因此,直接在登录后进行测试是我的主要测试路径。
同时,在另一个选项卡中导航到/Test
操作,也能正常工作。原始选项卡仍然会出错,直到我按照前面提到的导航或刷新它。
我有时候在导航或 F5 刷新后仍然会出现错误。因此,在开头段落中使用“大多数”这个词。
Javascript 错误反馈
我所能收集到的信息只有一个状态码为0
和一个错误消息为"error"
。
软件和版本
ASP.NET MVC 3
Chrome v28.0.1500.72 m
jQuery v1.8.3
AttributeRouting
使用Chrome时,我也尝试了清空缓存和CTRL+F5。
MVC
我有一个由[Authorize(Roles = "Admin")]
保护的操作。禁用此属性似乎解决了我的问题,但后来又出现了问题。如果之前的陈述让您感到困惑,请原谅。哈哈,头发少!
[GET("Test")]
public ActionResult Test()
{
Console.WriteLine("Test");
return new EmptyResult();
}
任何JavaScript脚本文件都不会位于受表单身份验证保护的文件夹后面。
jQuery doc.ready
我有一个jQuery错误事件,我已经使用它来暂停调试,以查看对象的内容。
//-- while I am using this method, I have also used the `error: `
//-- part of $.ajax with the same result.
$(function ()
{
$(document).ajaxError(function (event, jqxhr, settings, exception)
{
Debug.Log("event: " + event);
Debug.Log("jqxhr: " + jqxhr.responseText);
Debug.Log("settings: " + settings);
Debug.Log("exception: " + exception);
});
});
我有一个使用以下事件加载的jQuery方法。虽然以下脚本看起来可能会对服务器造成压力,但是有定时逻辑确保它每5秒钟只执行一次。
$(document).on('mousemove','*',function(e){ TestMethod(this,e,'mousemove');});
Javascript方法
这是我尽量简化的ajax调用。
function TestMethod(sender, e, eventTrgger)
{
$.ajax(
{
type: "GET",
url: '/Test',
dataType: 'html',
success: function (html)
{
//-- tested with nothing here.
}
});
}
Fiddler
当发生错误时,Fiddler不会显示GET请求,这意味着服务器没有被访问。此外,在操作中放置调试器断点可以确认该操作未被访问。
附加信息: 由于ajax调用每5秒钟发生一次。当在页面上看到状态为0和错误-"error"时,我清除缓存,而不刷新页面,Chrome和ajax请求开始工作。记录一下,我的Chrome缓存设置尽可能地小。
AuthorizeAttribute
后它能正常工作,而“服务器没有被访问”的概念似乎完全不相关。 - Richard Neil Ilagan