【问题标题】:Jquery ajax random error in Chrome only仅在 Chrome 中出现 Jquery ajax 随机错误
【发布时间】:2013-07-20 15:39:38
【问题描述】:

问题总结

通过表单身份验证使用 Chrome 登录后。作为 returnUrl 的登录页面将在不访问服务器的情况下出错我的 jQuery ajax。 status code = 0message = "error"。 (几乎没用)。在尝试了 Firefox 并且无法复制问题后,我开始认为 Chrome 是问题所在。清除缓存、关闭和重新打开并不能解决问题。我能找到的最接近的文章是this。 jQuery Ajax - Status Code 0? 但是,URL 是相对的,/Test

另一篇 SO 文章:jquery ajax problem in chrome

详细说明

我在使用 jQuery ajax 时遇到错误。似乎在使用表单身份验证登录后立即;登陆页面(returnUrl),会出现JS错误。然后刷新页面(F5)后,脚本将(大部分)工作。即使不使用 F5,使用链接导航到同一页面也将允许 JS 工作(大多数情况下)。所以登录后直接是我的主要测试路径。

另外,在另一个选项卡中直接导航到/Test 操作也可以。原始选项卡仍然出错,直到我按上述方式导航或刷新它。

我曾遇到过导航或 f5 刷新无法停止错误的情况。因此在开头段落中使用了“大部分”。

经过研究,JS调试器,代码简化和各种场景,一天又有点找不到可靠的原因;我需要一些帮助。

Javascript 错误反馈

我能收集到的最多的是status code of 0error message of "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 方法。虽然followig脚本看起来会猛击服务器。有计时逻辑确保它每 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 不显示 GET 请求,表示服务器未命中。另外,我在操作中放置了一个调试器断点,以确认操作没有被命中。

补充: 由于 ajax 调用每 5 秒发生一次。在页面上并看到状态-0 和错误-“错误”;我清除了缓存并且没有刷新页面,chrome 和 ajax 请求开始工作。作为记录,我的 chrome 缓存设置被设置为允许配置的尽可能少的缓存。

【问题讨论】:

  • 删除AuthorizeAttribute 使其工作的事实,以及“服务器没有受到攻击”的概念似乎完全脱节。
  • 我刚才禁用了该属性,但也导航到了准备好 returnURL 的登录表单。问题出现了。我更新了 Q 以表明在您阅读之后....尝试了许多不同的路径。
  • 我遇到了一个非常相似的问题。刷新几页后获取请求中断,我认为这与同样的问题有关。这在 Chrome 29 中修复了吗?

标签: jquery ajax asp.net-mvc google-chrome forms-authentication


【解决方案1】:

问题似乎是 Chrome 28 如何处理 GET 请求的缓存的错误。版本 27 工作正常,版本 28 中的 POST 请求也是如此。

您可以通过在 $.ajax() 调用中将 'cache' 属性设置为 false 来解决此问题。

【讨论】:

  • 好吧。到目前为止,一切都很好!今天我将继续测试它。我已经用警报替换了我的 console.log。所以我很快就会知道这个解决方案是否有效。为找到它而欢呼。也许可以在答案中添加指向该问题的超链接?
  • 刚刚在 Mac 上的 29.0.1547.65 中遇到了这个问题,http 0 响应 $.post 调用(所以肯定是 http post)。 Charles 没有显示 http 请求。通过 jquery 开始调试,试图找出 xhr 上是否存在潜在错误。让我发疯了一段时间,但最终只是将 ?r=" + Math.random() 添加到我的 URL(这是相对的 - /Keepalive.ashx)中,http statusCode 0 消失了,一切都恢复正常了。跨度>
  • 我刚刚在 chrome 29 中也遇到了这个错误,它似乎已在 chrome 30 中修复。将缓存设置为 false 为我在 chrome 29 中修复了它
猜你喜欢
  • 1970-01-01
  • 2021-08-24
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多