2

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

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

在这些非功能调用中,它似乎正在构建 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}

4

2 回答 2

1

我有同样的问题。

就我而言,这是由 NTLM (SSO) 身份验证引起的。

Internet Explorer在每个 post-Request 上检查 NTLM 身份验证


请求标头(来自 DebugBar 插件)

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

授权:NTLM....


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

于 2012-09-21T09:34:02.880 回答
0

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

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

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

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

希望这可以帮助。

于 2013-01-21T06:30:56.183 回答