Ok, so I've been trying to get this to work for a couple hours now....
Here is my simple ajax request:
function ajaxRequest() {
var xmlhttp;
var activexmodes = ["Msxm12.XMLHTTP", "Microsoft.XMLHTTP"];
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
else if (window.ActiveXObject)
{// code for IE6, IE5
for(var i = 0; i < activexmodes.length; i++)
{
try
{
return new ActiveXObject(activexmodes[i]);
}
catch (e)
{
// Suppress
}
}
}
else
{
return false;
}
}
Then I have this function calling it:
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)
{
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;
}
which is being called by this statement:
var s_result = run_ajax_form_submit_request('POST', s_path, s_send_parameters, true);
!!! END CODE !!!
What's happening is the code is executing correctly until it gets to this line: request.open("POST", "./scripts/pages/index/index/form_processor.php?", true);
Then it's running the onreadystatechange function which, since nothing has run yet, is returning the "Error 1." message.
Then the rest of the post script continues and changes the state again, this time it runs 4, but the onreadystatechange fails to run again, resulting in a final message of "Error 1."... The code will run properly in a debugger, but fails to run in the browser... Here is the first page of javascript that calls everything else:
!!! INITIAL CODE !!!
function submit_post_form (s_form_name, s_path, b_restrict, s_success_response) {
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);
}
I don't know what I'm doing wrong... maybe it's the timeouts (for animation), but I have no idea....