Вопрос № 162030: Здравствуйте. У меня следующая проблема: чтобы вставить строку pp в базу я пользуюсь функцией sendRequest(url,pp,id) - в ie и в опере строка добавляется нормально ,т.е. один раз кликнул одна строка добавилась , а в сафари и мазилле работает не к...
Вопрос № 162.030
Здравствуйте. У меня следующая проблема: чтобы вставить строку pp в базу я пользуюсь функцией sendRequest(url,pp,id) - в ie и в опере строка добавляется нормально ,т.е. один раз кликнул одна строка добавилась , а в сафари и мазилле работает не корректно ,один раз кликнул может добавится несколько строк сразу, ответ с сервера вывести не получается ни в ie ни в файрвокс . Можно ли ,что бы эта функция работала нормально с ie, сафари и файрвокс, и, что бы ссылка
Приложение:
Отправлен: 04.03.2009, 18:14
Вопрос задал: Dima1967 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Товарищ Бородин
Здравствуйте, Dima1967! Я немного "покромсал" Ваш код. На мой взгляд, скользким моментом в Вашем варианте является само объявление объекта запроса. Кроме того, переменную, которую мы сделаем объектом запроса к серверу, я сделал глобальной - это гораздо удобнее. Кроме того, я написал для создания запроса отдельную функцию, в которую вынес инициализацию объекта XMLHttpRequest. Вот мой код. Давайте его поразбираем
// в этой переменной
и будет храниться объект запроса var http_request = null;
// Эта и есть та самая функция, которая инициализирует запрос function createRequest() { try { http_request = new XMLHttpRequest(); } catch (trymicrosoft) { try { http_request = new ActiveXObject('Msxml2.XMLHTTP'); } catch (othermicrosoft) { try { http_request = new ActiveXObject('Microsoft.XMLHTTP'); } catch (failed) { http
_request = false; } } } if (!http_request) { alert(' не добавлен,что бы добавить воспользуйтесь пожалуйста браузером Microsoft Internet Explorer версии 4.0 и выше либо
браузером Opera версии 8.0 и выше. '); return false; } return true; }
function sendRequest(url,pp,id) // отправлять данные на сервер { var my_pp=pp;
createRequest(); if (http_request) { var browser_name = navigator.appName; var browser_version = parseFloat(navigator.appVersion);
if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } // Событию onreadystatechange присваиваем в качестве значения
ссылку на функцию AlertTrue http_request.onreadystatechange = AlertTrue; http_request.open('POST', url, true); // open - метод класса XMLHttpRequest
http_request.send("my_pp="+my_pp); // send - метод класса XMLHttpRequest передача переменной
} }
function AlertTrue() { if (http_request.readyState =
= 4){ if (http_request.status == 200){ var ans = http_request.responseText; document.getElementById(id).innerHTML='добавлен'; } else { alert('С запросом возникла проблема.'); } } else { } }
Еще следует учитывать, что запрос от браузера к серверу идет какое-то ненулевое время. У меня бывало такое - с непривычки понять это довольно трудно, однако в случае, когда у Вас добавляется несколько строк, думаю, на самом деле их добавляется столько,
сколько раз Вы послали запрос на сервер. Соответственно, сценарий желательно затормаживать на пару секунд. Например, выводить какое-нибудь сообщение с помощью alert. За это время запрос дойдет до сервера, и успеет прийти ответ.
С уважением, Товарищ Бородин
Ответ отправил: Товарищ Бородин (статус: Профессионал) Россия, Новосибирск Тел.: +7-923-245-3366 ---- Ответ отправлен: 04.03.2009, 20:05
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 245049 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.