Функция onreadystatechange не вызывается

По какой-то причине функция обратного вызова onreadystatechange не вызывается в асинхронном режиме. Я протестировал пост в синхронном режиме и подтвердил, что сам пост работает нормально (закомментировал тестовый код, который я использовал для проверки поста в синхронном режиме). Проблема возникает как в сафари, так и в последней версии Firefox. Кто-нибудь может сказать мне, что я здесь делаю не так? Спасибо.

    <html>
    <head>
    <script>
    function recordScore(str)
    {

    if (str.length==0)
    { 

        return;
    }

    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
        alert ("Your browser does not support AJAX!");
        return;
    } 

    var url = "http://hellworld3.appspot.com/findcountry";
    var params = "screenname = "+document.getElementById("screenname1").value+"&score = "+document.getElementById("score1").value;
    alert("params: "+params);
    xmlHttp.open("POST",url,true);

    xmlHttp.onreadystatechange = function() 
    {
        alert("entered call back function. readstate value is: "+xmlHttpreadyState+". Response Text is: "+xmlHttp.responseText);

    if (xmlHttp.readyState==4)
    { 
        document.getElementById("message").innerHTML=xmlHttp.responseText;
    }
    }
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
    xmlHttp.send(params);

    //Testing code for synchronous mode
    //alert("Http get status is: "+xmlHttp.status);
    //alert("Http ready state value is: "+xmlHttp.readyState);
    //alert("Http get response text is: "+xmlHttp.responseText);
    //document.getElementById("message").innerHTML=xmlHttp.responseText;
    }


    function GetXmlHttpObject()
    {
        var xmlHttp=null;
        try
        {
            // Firefox, Opera 8.0+, Safari
            xmlHttp=new XMLHttpRequest();
        }
        catch (e)
        {
            // Internet Explorer
            try
            {
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        return xmlHttp;
    }

    </script>


    </head>


    <body>

    <form name = "testform">
        Screename: 
        <input type = "text" id = "screenname1" name = "screenname">
        <br/>
        Score:
        <input type = "text" id = "score1" name = "score" onchange = "recordScore(this.value)"> 
        <br/>
        <p id = "message">test</p>

        <input type = "submit" value = "Submit">
    </form>

    </body>


    </html>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
10 590
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поправьте меня, если я ошибаюсь, но для POST вам не нужно делать setRequestHeader для Content-Length вот так;

xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader('Content-length',(params?params.length:0));
xmlHttp.send(params);

Это может решить вашу проблему.

Он работал без добавления этой строки. Я изучу вашу точку зрения дальше. Я действительно ценю твою помощь. Ответ RoBorg устранил мою проблему

Satish 31.12.2008 19:44
Ответ принят как подходящий

у вас есть ошибка в функции onreadystatechange:

alert("entered call back function. readstate value is: "+xmlHttpreadyState+". Response Text is: "+xmlHttp.responseText);

xmlHttpreadyState должен быть xmlHttp.readyState

После того, как я это исправил, у меня все заработало в FF3.

Спасибо. Это сработало. Не могу поверить, что пропустил это, несмотря на то, что просматривал код несколько раз.

Satish 31.12.2008 19:40

Другие вопросы по теме