AJAX & request

12
D
На сайте с 14.01.2007
Offline
153
970

у меня вопрос тем кто работает с AJAX.

так вот, у меня не доходит часть ответов от сервера обратно в browser. т.е. request уходит (после него алерт стоит с statusText, он ОК), но часть ответов сервера теряется. сервер точно отвечает, т.к. если request напрямую вбить в строку урл, то получаем ответ + одновременно пишется файл с тем же содержимым, там всё так как должно быть.

если у кого-то было что-либо подобное или симптомы знакомы, отпишитесь пожалуйста. код, особенно на серваке, достаточно громоздкий, поэтому пока не привожу.

дело проис ходит на localhost, apache, php

Solmyr
На сайте с 10.09.2007
Offline
501
#1

Попробуйте проследить обмен броузера с сервером используя или сниффер или локальный прокси типа проксомитрона.

edogs software
На сайте с 15.12.2005
Offline
775
#2

Dinozavr,

ajax самописный? Наиболее распространённая ошибка когда не ждут или неправильно ждут ответа сервера и начинают обрабатывать на javascript данные раньше (а javascript шустрый) чем они вернулись (или полностью вернулись).

Обязательно надо ждать события полной загрузки данных перед дальнейшими действиями.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
D
На сайте с 14.01.2007
Offline
153
#3
edogs:
Наиболее распространённая ошибка когда не ждут или неправильно ждут ответа сервера и начинают обрабатывать на javascript данные раньше (а javascript шустрый) чем они вернулись (или полностью вернулись).

кусочек кода:


request.onreadystatechange = parse_request;

}
}

function parse_request()
{
alert("АГА!");

и вот этого "АГА!" то и нет, т.е. эта функции вообще не запускается.

повторюсь, проблема не всегда, а где-то в 50% случаев. причем между работает/не работает может быть только перезагрузка страницы .

Solmyr, похоже придётся...

grey109
На сайте с 15.06.2005
Offline
160
#4

Dinozavr, не знаю, насколько помогу, но можешь глянуть как я делал http://www.mobileset.ru/devices/ (см. html в самом низу яваскрипт)

Грубо говоря там два скрипта: один запрашивает данные, ждет, получает данные, парсит их, и вставляет в списков (все это делает яваскрипт). Второй скрипт принимает запрос от первого и выдает данные в спецформате(через разделитель \r\n). Второй скрипт все далает на стороне сервера.

ArtInt
На сайте с 28.02.2007
Offline
61
#5

Могу посоветовать использовать замечательный плагин для Firefox, называется Firebug предназначен для отладки javascript кода можно здесь скачать http://www.getfirebug.com/. Он и пост/гет запросы тоже показывает, proximitron даже не нужен :). Но для просмотра заголовков очень удобен другой плагин livehttpheaders (можно на сайте Firefox-а найти). Использую оба плагина уже пару месяцев, нарадоваться не могу :).

Fiat lux!
DC
На сайте с 08.09.2007
Offline
17
#6

Dinozavr, покажи весь код функции, которая посылает запрос

Чудеса случаются... это вам любой программист скажет... Скрипты (php, mysql, javascript и т.д.) любой сложности и вёрстка на заказ т.: +38(099)0569716, icq: 296874736
dvaes
На сайте с 03.09.2007
Offline
65
#7

дело в том что там 4 статуса передачи данных. и правильно обрабатывать запрос надо на последнем статусе. т.е. правильно будет


function parse_request()
{
if (request.readyState == 4) {
if (request.status == 200) {
alert("АГА!");
}
}
}

так будет выполняться если данные полностью пришли и статус страницы - 200 OK

D
На сайте с 14.01.2007
Offline
153
#8

grey109, dvaes, с теорией аякса вроде всё нормально, но вот данный конкретный случай меня добивает.

ArtInt, firebug поставил, спасибо. и вот он говорит, что я и так подозревал. response приходит нормальный. но эта $%/&% функция всё равно иногда не запускается.


function setRequest(sendtext)
{
sendtext = sendtext + "&cash=" + Number(new Date);;

if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
req = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
req = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {}
}
}

if (!req) {
alert("Kann keine XMLHTTP-Instanz erzeugen");
return false;
} else {
var url = "ajax.php";

req.open('post', url, true);

req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// Request senden
req.send(sendtext);
alert (sendtext);
// Request auswerten
req.onreadystatechange = parse_req;
}
}
function parse_req()
{
switch (req.readyState) {
case 4:
if (req.status != 200)
{
alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+req.status);
}
else
{
var xmlDoc = req.responseXML;
alert (req.responseText);
}
break;
default:
break;
}
}
D
На сайте с 14.01.2007
Offline
153
#9

у меня даже слов нет, как это назвать....

2!!!!! дня я искал ошибку. угадайте, что это было? ошибка в коде, приведенном в сообщении выше.

но блин, как нервов жалко... :)

[Удален]
#10

Не проще ли использовать готовую библиотеку? Очень понравилась http://dklab.ru/lib/JsHttpRequest/

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий