【问题标题】:jQuery.ajax event not firing properly in IE8 (except when Fiddler is loaded)jQuery.ajax 事件在 IE8 中未正确触发(加载 Fiddler 时除外)
【发布时间】:2012-05-04 16:06:59
【问题描述】:

这可能是我遇到过的最奇怪的错误:

所以我有一堆 jQuery.ajax 调用,我把它们放在一起的 Web 服务。它在 Firefox 和 Chrome 中运行良好,但在 IE8 中没有任何作用除非我运行了 Fiddler。 (这与here 报告的问题类似,但我已经尝试过提到的东西,但无济于事。)

在这些非功能调用中,它似乎正在按应有的方式构建 jqXHR 对象,但缺少一些东西。不过不知道是什么——我对 jQuery 的内部工作方式并不是非常熟悉,所以在调试器中单步执行调用对我来说只能做这么多。

来电:

$.ajaxSetup({
    type: "POST",
    timeout: 30000,
    contentType: "application/json; charset=utf-8"
});

$.ajax({
url: "/PSWS/UserManager.asmx/Login",
data: '{"emailAddress":"' + myEmailAddress + '","password":"' + myPassword + '","stayLoggedIn":' + (myStayLoggedIn ? 'true' : 'false') + '}',
success: function (response) {
    if (!response.Success) {
        alert(response.Message);
    } else {
        $(this).find('.message').remove();
        $.fn.colorbox.close();
    }
},
dataType: 'json',
error: function (jqXHR, textStatus, errorThrown) {
    $(this).find('.message').remove();
    $(this).prepend('<div class="message message_error">Error!<br/>' + jqXHR.status + ' - ' + jqXHR.statusText + '</div>');
}

});`

我想知道我的 JSON 是否有问题,无论是发送的还是接收的。除了通过 Fiddler 之外,我不知道有什么方法可以捕捉到这一点,但它似乎是有效的。无论如何,对于它的解析器和 JSONLint 来说足够有效。

发送: {"emailAddress":"test@example.com","password":"asdasdasd","stayLoggedIn":true}

收到: {"__type":"PSUserManagerService.SystemResponse","Success":false,"Message":"Error logging in: Invalid username and/or password.","Subscriptions":null}

【问题讨论】:

    标签: jquery ajax json web-services internet-explorer-8


    【解决方案1】:

    我遇到了同样的问题。

    在我的情况下,这是由 NTLM (SSO) 身份验证引起的。

    Internet Explorer 在每个后请求中检查 NTLM 身份验证


    请求标头(来自 DebugBar 插件)

    Cookie:JSESSIONID=2323......323239

    授权:NTLM....


    我不知道为什么它确实适用于提琴手......也许通过这个代理来操纵身份验证标头。

    【讨论】:

      【解决方案2】:

      Witali 可能是正确的,这可能与 NTLM 身份验证有关。

      就我而言,很难对问题进行诊断。我有 3 个网络:具有类似配置的开发、测试和产品。相同的 IE 8 可以成功地将 JSON 对象发布到开发和测试,但不能成功发布。所以它不应该是客户端的问题。然后我也排除了服务器的问题,例如应用程序或版本控制,因为 Chrom 和 Firefox 可以成功发布到同一个 prod 服务器的应用程序。但是,它看起来更像是一个客户端问题,因为如果我使用 fiddler,那么它可以在 prod 中工作。

      无论如何,我试验的最终解决方案是在站点级别启用 Windows 身份验证,而不仅仅是在 IIS 中的应用程序级别(我的站点下面有多个应用程序)。

      您还必须 IIS(站点)-> Windows 身份验证->高级设置->提供程序,使 NTLM 置顶而不是 Negociate。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-01-10
        • 1970-01-01
        • 2014-01-01
        • 2014-01-28
        • 2013-11-23
        • 2015-03-26
        • 2011-10-28
        • 2015-05-20
        • 2016-10-27
        相关资源
        最近更新 更多