Хорошо, так что я пытался получить эту работу в течение нескольких часов теперь ....AJAX onreadystatechange выполняется перед изменением состояния сообщения?
Вот мой простой запрос Ajax:
функция 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;
}
}
Тогда я эту функцию, назвав его:
функция 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;
}
, который вызывается этим утверждением:
вар s_result = run_ajax_form_submit_request ('POST', s_path, s_send_parameters, правда);
!!! КОНЕЦ КОДА !!!
Что происходит, код корректно выполняется до тех пор, пока он не достигнет этой строки: request.open ("POST", "./scripts/pages/index/index/form_processor.php?", True);
Затем он запускает функцию onreadystatechange, которая, поскольку ничего еще не запущена, возвращает «Ошибка 1.». сообщение.
Затем остальная часть пост-скрипта продолжается и снова изменяет состояние, на этот раз он запускается 4, но onreadystatechange не запускается снова, в результате чего появляется окончательное сообщение «Ошибка 1». ... Код будет запущен правильно в отладчике, но не работает в браузере ... Вот первая страница javascript, которая вызывает все остальное:
!!! НАЧАЛЬНЫЙ КОД !!!
функция 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);
}
Я не знаю, что я делаю неправильно ... Может быть, это время ожидания (для анимации), но я понятия не имею ....
Хорошо, я достал все сообщения об ошибках, но теперь он просто ничего не возвращает ... Отладчик все еще прав, однако браузер все равно не работает ... Что-то еще не так? – Jingrah1
Да, вызов ajax - ** async **, вы не можете сделать это таким образом. – adeneo
Спасибо. Я очень это ценю, я бы был здесь гораздо дольше, пытаясь понять это. – Jingrah1