1) Абсолютно во всех браузерах каждый 15-20 запрос не возвращает результат 200 от сервера. Собственно об этом информацию и получаю, не было ответа 200.
2) В ИЕ7-8: всё куда хуже, работают 3 паралельно скрипта, которые дёргают БД. Временами скрипт не отправляет методом POST часть данных, поэтому я получаю нечто вроде: if(!isset($_POST['correct_user'])) {exit("Данные не были отправлены!");}
3) На этом фоне есть ещё один AJAX скрипт, который отправляется по событию. Так вот, запрос ушел, а ответа приходится ждать пару минут, и только через пару минут вернёт ответ нечто вроде ошибки первой, то есть не было ответа 200. При этом если параллельно нажать отправить ЕЩЁ один раз, то отправка будет осуществлена и в считанные секунды, а тот непонятно где висеть!
Правда у меня есть идея только по пункту 3, сделать проверку статуса на 200, и если не такой статус, то сделать повторную отправку. Проблема тут в другом: ждать ответа 200 минуты 2, а это должны быть БЫСТРЫЕ сообщения, и такая задержка не подходит, кстати, а можно установить время ожидания ответа с сервера? Там 10 секунд, к примеру? И вторая проблема, что можно получить: "нет ответа", и отправить повторно, а, МАЛО ЛИ, вдруг он всё же обработается, и получится 2 одинаковых сообщения, что тоже ужасно...
Собственно вот сам скрипт:
function ichatSetMess() {
if(correct_user == 0) {
alert('Please select user first')
return false
}
text = document.getElementById('ichat_mess').value
text = text.replace(/\n+$/m, '')
if(text.length < 1) {
document.getElementById('ichat_mess').value = ''
return false
}
document.getElementById('ichat_mess').value = ''
var query_post = 'correct_user=' + correct_user + '&text=' + encodeURIComponent(text)
var query_get = '';
var time = new Date().getTime();
var url = '/ichat_set_mess.php?r=' + time;
var oXmlHttp = createXMLHttp();
oXmlHttp.open("POST", url + query_get, true);
oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded, charset=utf-8");
oXmlHttp.onreadystatechange = function() {
if(oXmlHttp.readyState == 4) {
if(oXmlHttp.status == 200) {
var response = eval( "(" + oXmlHttp.responseText + ")" );
if(response.status == "OK") {
var newmess = ichatMess(response.name,response.date,response.text,response.whosend)
if(document.getElementById('money_info')) {
document.getElementById('money_info').innerHTML = response.credits + ' credits'
}
if(response.time) {
//console.info(response.time)
}
} else {
var newmess = '<div><span class="ichat_mess_area_error">' + response.status + '</span></div>'
}
} else {
var newmess = '<div><span class="ichat_mess_area_error">Message hasn\'t been sent. Error: server doesn\'t answer</span></div>'
}
ichat_mess_area.innerHTML = ichat_mess_area.innerHTML + newmess
ichat_mess_area.scrollTop = ichat_mess_area.scrollHeight
}
};
oXmlHttp.send(query_post);
}
Вот другой по получаю тоже есть:
function ichatLoadData(user,login,photo,status,allow) {
if(!user)
return false
if(status_video) {
ichatVC(document.getElementById('ichat_button_video'),'video');
autostart[correct_user] = true;
}
correct_user = user
VideoFlashChangeUserInfo()
var query_post = 'correct_user=' + correct_user
var query_get = '';
var time = new Date().getTime();
var url = '/ichat_load_data.php?r=' + time;
var oXmlHttp = createXMLHttp();
oXmlHttp.open("POST", url + query_get, true);
oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded, charset=utf-8");
oXmlHttp.onreadystatechange = function() {
if(oXmlHttp.readyState == 4) {
if(oXmlHttp.status == 200) {
var response = eval( "(" + oXmlHttp.responseText + ")" );
if(response.status == "OK") {
ichat_mess_area.innerHTML = '';
for(var key in response.mess) {
if(response.mess[key].name != 'NOMESS') {
ichat_mess_area.innerHTML = ichat_mess_area.innerHTML + ichatMess(response.mess[key].name,response.mess[key].date,response.mess[key].text,response.mess[key].whosend)
}
}
ichat_mess_area.scrollTop = ichat_mess_area.scrollHeight
document.getElementById('ichat_commands_list').innerHTML = response.commands
document.getElementById('correct_user_profile').innerHTML = response.profile
ichatGetContacts()
if(autostart[correct_user])
ichatVC(document.getElementById('ichat_button_video'),'video');
} else {
ichat_mess_area.innerHTML = ichat_mess_area + '<div><span class="ichat_mess_area_error">' + response.status + '</span></div>'
ichat_mess_area.scrollTop = ichat_mess_area.scrollHeight
}
} else {
//ichat_mess_area.innerHTML = ichat_mess_area.innerHTML + '<div><span class="ichat_mess_area_error">Action hasn\'t been sent. Error: server doesn\'t answer</span></div>'
//ichat_mess_area.scrollTop = ichat_mess_area.scrollHeight
}
}
};
oXmlHttp.send(query_post);
}
Проблема ,скорее всего, не в этих скриптах, хотя, так же, проблема в понимании Аякса, это очень ужасные проблемы и у меня нет идей, пока что, как с ними справиться... даже не знаю почему так получается...
Может с сервером что не так, и он часть входящего трафика режет... ну прям в общем-то завал...
_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).