Javascript 在状态更改后执行AJAX onreadystatechange?

Javascript 在状态更改后执行AJAX onreadystatechange?,javascript,php,ajax,Javascript,Php,Ajax,好的,我已经试着让它工作了几个小时了 以下是我的简单ajax请求: 函数ajaxRequest() { } 本声明称之为: var s_result=run_ajax_form_submit_request('POST',s_path,s_send_参数,true) !!!结束代码 发生的情况是,代码在到达这一行之前一直在正确执行: 打开(“POST”,“/scripts/pages/index/index/form_processor.php?”,true) 然后它运行onreadystate

好的,我已经试着让它工作了几个小时了

以下是我的简单ajax请求:

函数ajaxRequest() {

}

本声明称之为:

var s_result=run_ajax_form_submit_request('POST',s_path,s_send_参数,true)

!!!结束代码

发生的情况是,代码在到达这一行之前一直在正确执行: 打开(“POST”,“/scripts/pages/index/index/form_processor.php?”,true)

然后它运行onreadystatechange函数,由于还没有运行任何程序,因此返回“Error 1.”消息

然后post脚本的其余部分继续并再次更改状态,这次它运行4,但onreadystatechange无法再次运行,导致最后一条消息“错误1”。。。代码将在调试器中正常运行,但无法在浏览器中运行。。。下面是调用其他所有内容的javascript的第一页:

!!!初始代码

函数提交表单(表单名称、路径、限制、成功响应) {

var o_form=document.getElementById(s_form_name);
var oa_inputs=o_form.getElementsByTagName('input');
var oa_selects=o_form.getElementsByTagName('select');
var o_submit=表单查找提交(oa_输入);
var o_messages=o_form.getElementsByClassName('messages')[0];
o_messages.className='messages';
开关(b_限制)
{
大小写正确:
对于(i=0;i
}


我不知道我做错了什么。。。可能是超时(用于动画),但我不知道….

这就是它的工作方式,
onreadystate
事件在请求过程中多次触发,第一次甚至在发送任何内容之前触发,这就是为什么您必须侦听数字
4
,您出于某种原因假设
1
2
等都是错误,不是,只是请求不同阶段的状态码

状态代码如下所示

0:请求未初始化
1:已建立服务器连接
2:收到请求
3:处理请求
4:请求已完成,响应已准备就绪

您可以看到为什么
1
会触发,它不是错误代码,而是建立连接时的状态代码

您可以通过删除添加的所有错误处理来解决此问题

您的代码还有另一个问题,您正在以这种方式设置ajax

function run_ajax_form_submit_request(s_method, s_processor, s_params, b_syn) {
    var request = new ajaxRequest();
    var message = null;

    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            message = request.responseText;
        }
    }

    return message;
}
你打电话来了
var request = new ajaxRequest();
var message = null;

    request.onreadystatechange=function()
    {

        if (request.readyState == 4)
        {

            if (request.status == 200 || window.location.href.indexOf("http") == -1)
            {

                if (request.responseText == 'true')
                {

                    message = 'true';

                }
                else
                {       

                    message = request.responseText;

                }

            }
            else
            {

                messge = "There was a problem processing this request.";

            }

        }
        else if (request.readyState == 0)
        {

            message = "Error: 0.";

        }
        else if (request.readyState == 1)
        {

            message = "Error: 1.";

        }
        else if (request.readyState == 2)
        {

            message = "Error: 2.";

        }
        else if (request.readyState == 3)
        {

            message = "Error: 3.";

        }

    }

switch (s_method)
{

    case 'POST':

        request.open("POST", "./scripts/pages/index/index/form_processor.php?", true);
        request.setRequestHeader("Content-s_input_type", "application/x-www-form-urlencoded");
        request.send(s_params);

        break;

    case 'GET':

        request.open(s_method, s_processor, b_syn, true);
        request.send();

        break;

}

return message;
var o_form = document.getElementById(s_form_name);
var oa_inputs = o_form.getElementsByTagName('input');
var oa_selects = o_form.getElementsByTagName('select');
var o_submit = form_find_submit(oa_inputs);
var o_messages = o_form.getElementsByClassName('messages')[0];

o_messages.className = 'messages';

switch (b_restrict)
{

    case true:

        for (i = 0; i < oa_inputs.length; i++)
        {

            oa_inputs[i].disabled = true;

        }

        for (i = 0; i < oa_selects.length; i++)
        {

            oa_selects[i].disabled = true;

        }

    break;

}

o_messages.classList.add('loading');

setTimeout(function(){

    o_messages.classList.add('active');

    setTimeout(function(){

        var sa_all_inputs_as_strings = new Array();

        var inputIDArray = new Array();
        var selectIDArray = new Array();

        var inputValArray = new Array();
        var selectValArray = new Array();

        var s_input_type = null;

        for (i = 0; i < oa_inputs.length; i++)
        {

            s_input_type = oa_inputs[i].type;
            var s_input_val_temp = null;

            if (s_input_type.trim() != 'button' && s_input_type.trim() != 'submit')
            {

                sa_all_inputs_as_strings[i] = new Array();

                sa_all_inputs_as_strings[i][0] = oa_inputs[i].getAttribute('name');

                if (s_input_type == 'text' || s_input_type == 'password')
                {

                    s_input_val_temp = oa_inputs[i].value;

                }
                else if (s_input_type == 'radio' || s_input_type == 'checkbox')
                {

                    if (oa_inputs[i].checked)
                    {

                        s_input_val_temp = 'true';

                    }
                    else
                    {

                        s_input_val_temp = 'false';

                    }

                }

                sa_all_inputs_as_strings[i][1] = s_input_val_temp;

            }

        }

        for (i = sa_all_inputs_as_strings.length; i < (sa_all_inputs_as_strings.length + oa_selects.length); ++i)
        {

            sa_all_inputs_as_strings[i] = new Array();

            sa_all_inputs_as_strings[i][0] = oa_selects.id;
            sa_all_inputs_as_strings[i][1] = oa_selects.options[(oa_selects[selectInterval]).selectedIndex].value;

        }

        var s_send_parameters = "form=" + s_form_name;

        for (i = 0; i < sa_all_inputs_as_strings.length; i++)
        {

            s_send_parameters +=  "&" + encodeURIComponent(sa_all_inputs_as_strings[i][0]) + "=" +  encodeURIComponent(base64Encode(sa_all_inputs_as_strings[i][1]));

        }

        var s_result = run_ajax_form_submit_request('POST', s_path, s_send_parameters, true);


        o_messages.classList.remove('active');

        setTimeout(function(){

            o_messages.className = 'messages';

            if (s_result == 'true')
            {

                o_messages.innerHTML = s_success_response;
                o_messages.classList.add('success');

            }
            else
            {       

                o_messages.innerHTML = s_result;
                o_messages.classList.add('error');


                for(i = 0; i < oa_inputs.length; i++)
                {

                    if (oa_inputs[i].type != 'submit')
                    {

                        oa_inputs[i].disabled=false;
                        oa_inputs[i].classList.remove('disabled');

                    }

                }

                for (i = 0; i< oa_selects.length; i++)
                {

                    oa_selects[i].disabled=false;
                    oa_selects[i].classList.remove('disabled'); 

                }

            }

            setTimeout(function(){

                o_messages.classList.add('active');

            }, 100);

        }, 200);

    },200);

},100);
function run_ajax_form_submit_request(s_method, s_processor, s_params, b_syn) {
    var request = new ajaxRequest();
    var message = null;

    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            message = request.responseText;
        }
    }

    return message;
}
var s_result = run_ajax_form_submit_request('POST', s_path, s_send_parameters, true);