POST-запрос в AJAX не работает асинхронно - PullRequest
0 голосов
/ 14 ноября 2011

У меня проблема с вызовом AJAX, который я делаю для входа в систему.Код выглядит следующим образом:

function loginUser()
{
    var xmlhttp;
    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) {
            //alert(xmlhttp.responseText);
            var responseString = xmlhttp.responseText;
            if(responseString.indexOf("loginStatus:approved") != -1) {
                document.getElementById("logInBar").innerHTML = "Welcome " + getCookie("userLoggedOnfn") + " <a href=\"logoutUser.php\">Logout</a>";
            }
        }
    }

    var params = "loginUsername=" + document.getElementById("loginUsername").value +
                 "&loginPassword=" + document.getElementById("loginPassword").value +
                 "&d=" + new Date().getTime();

    //alert(params);

    xmlhttp.open("POST", "loginUser.php", true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", params.length);
    xmlhttp.setRequestHeader("Connection", "close");
    xmlhttp.send(params);

        //alert("."); //this alert box is needed to make it work if it's asynchronous
}

Проблема в том, что, если он у меня такой, он никогда не достигнет readyState == 4 или 3, в этом отношении ... он достигает только 2. И еслиЯ прерываю операции js до того, как он достигнет readyState == 3 в отладчике в chrome, он переходит к readyState == 4. И если я делаю это синхронно, это работает, или если я добавляю окно предупреждения в конце ... этокак будто ему нужно сделать паузу, прежде чем он достигнет readyState == 4 или что-то ... Так что я делаю не так?

Кстати, мне нужно сделать это в чистом AJAX, потому что это школьное задание ...

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011

Я нашел проблему! Это было в html-коде.

У меня были кнопка входа и текстовые поля внутри тега формы, и Chrome автоматически обновлял всю страницу, когда я нажимал кнопку внутри тега формы. Так что вызов AJAX был испорчен из-за перезагрузки страницы.

Я только что удалил теги формы, и проблема была решена.

0 голосов
/ 14 ноября 2011

это может быть из-за quotas в + getCookie ("userLoggedOnfn") + "; экранируйте getCookie(\"userLoggedOnfn\") и убедитесь, что оно работает

с консоли

   Refused to set unsafe header "Content-length"
   Refused to set unsafe header "Connection"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...