Post方法XMLHttpRequest强制登录对话框(IE问题)

时间:2010-05-26 20:03:28

标签: javascript internet-explorer xmlhttprequest

我们正在运行Windows IIS 6并使用它的本机功能来保护使用Windows身份验证的文件作为我们的登录方法。

它运行正常,但是当我尝试从IE发布方法XMLHttpRequest时,我再次获得登录对话框,这会导致请求失败。 奇怪的是,Mozilla和Safari运行良好。

我是否可以使用标题或其他东西使IIS将其识别为同一个会话,而不是重新登录?

function ajaxQuery(method, url, params, asynchronous, readyFunction, is_done) {
    if (asynchronous == null) {
        asynchronous = true;
    }
    //alert("URL: "+url);
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            readyFunction(xmlhttp.responseText);
            if (is_done) {
                is_done("ok");
            }
        }
    }
    if (method.toLowerCase() == "get") {
        url += "?" + params;
        params = null;
    }
    debug = url;
    xmlhttp.open(method, url, asynchronous);
    if (method.toLowerCase() == "post") {
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.setRequestHeader("Content-length", params.length);
        xmlhttp.setRequestHeader("Connection", "close");
        debug = params.length;
    }
    xmlhttp.send(params);
}

1 个答案:

答案 0 :(得分:0)

检查回复的响应标头。我们在(有意)返回401代码的应用程序中遇到了同样的问题。 IIS捕获了该代码并添加了强制IE显示登录的WWW-Authenticate标头。我们可以通过返回403来修复它。