Javascript 在状态更改后执行AJAX onreadystatechange?
好的,我已经试着让它工作了几个小时了 以下是我的简单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的第一页: !!!初始代码 函数提交表单(表单名称、路径、限制、成功响应) {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
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);