jQuery.ajax事件在IE8中无法正常触发(加载Fiddler时除外)

时间:2012-05-04 16:07:00

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

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

所以我有一堆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}

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。

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

Internet Explorer检查每个帖子后的 NTLM认证


请求标头(来自DebugBar插件)

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

授权:NTLM ....


我不知道为什么它与fiddler一起工作......也许通过这个代理可以操纵authentification标题。

答案 1 :(得分:0)

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

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

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

您还必须使用IIS(站点) - &gt; Windows身份验证 - &gt;高级设置 - &gt;提供商,使NTLM成为顶级而非Negociate。

希望这有帮助。