
09.09.2011, 20:52
|
Интересующийся
|
|
Регистрация: 09.07.2011
Сообщений: 21
|
|
передача формы через AJAX
div делается от нажатия на кнопку, заполняется AJAXом, содержание разобычная html форма, посылается php скриптом. Везде работает, кроме IE, в нем форма не отображается, регистрируется "неизвестная ошибка выполнения".
php:
<?php
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Content-type: text/html charset=windows-1251");
echo '<form>fffffff</form>';
?>
ajax запрос стандартный, простой; ошибка возникает при обращении к xmlhttp.responseText, xmlhttp.responseHeader, например, работает нормально. Трудность возникает только если отправлять форму, <ul>, <b> и т.д. приходит и отображается нормально.
Где ошибка?
Последний раз редактировалось c124578, 09.09.2011 в 23:01.
|
|

09.09.2011, 21:37
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
header("Content-type: text/html, multipart/form-data; charset=windows-1251");
Зачем тут multipart/form-data? Это заголовок запроса с body, т.е. POST/PUT, который устанавливает баундари для разделения строковых/бинарных multipart данных. А тут он ни к месту.
|
|

09.09.2011, 21:40
|
 |
Mr. Jacob
|
|
Регистрация: 20.01.2011
Сообщений: 194
|
|
Сообщение от c124578
|
echo '<form>fffffff<form>';
|
1. Закройте тег < /form>
2. Андрей Параничев опередил =)
|
|

09.09.2011, 23:04
|
Интересующийся
|
|
Регистрация: 09.07.2011
Сообщений: 21
|
|
первое сообщение неправильно я написал, исправил.
тег закрыт, multipart/form-data нет; в таком виде не работает. В общем, вроде все правильно, а в IE не работает.
|
|

10.09.2011, 00:42
|
 |
Аспирант
|
|
Регистрация: 30.08.2011
Сообщений: 61
|
|
Хотелось бы увидеть весь код.
Скажем, если заменить form на div (или на вообще какой-нибудь выдуманный тег, но всё содержимое при этом оставить в прежнем объёме), то ошибка возникать не будет?
|
|

10.09.2011, 01:46
|
 |
Mr. Jacob
|
|
Регистрация: 20.01.2011
Сообщений: 194
|
|
Сообщение от c124578
|
ошибка возникает при обращении к xmlhttp.responseText
|
Ну так дайте кусок этого кода.
|
|

10.09.2011, 11:20
|
Интересующийся
|
|
Регистрация: 09.07.2011
Сообщений: 21
|
|
php:
<?php
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Content-type: tetx/html; charset=windows-1251");
echo '
<FORM id="frm2" method="post" action="Excel.php" onclick="check()">
Ваш телефон<br><INPUT TYPE="text" name="tel" SIZE="20" VALUE=""><br>
Текст сообщения<TEXTAREA NAME="request" WRAP="virtual" COLS="40" ROWS="3"></TEXTAREA><br>
<INPUT TYPE="submit" VALUE="Отправить">
</form>
';
?>
JS:
function getContent(uriContent, TargetDiv){
var xmlhttp = getXmlHttp();
xmlhttp.open('POST', uriContent, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
document.getElementById(TargetDiv).innerHTML = document.getElementById(TargetDiv).innerHTML + xmlhttp.responseText;
}
}
};
xmlhttp.send(null);
}
Если поменять form на div, то все в порядке.
TargetDiv я ввел от неумения, если кто знает, покажите как заставить getContent() возвращать значение через return значение xmlhttp.responseText.
|
|

10.09.2011, 13:01
|
 |
Аспирант
|
|
Регистрация: 30.08.2011
Сообщений: 61
|
|
Холодно =) Здесь всё работает, так что нужно ещё больше скрипта. Желательно выложить "нерабочий" пример.
Сообщение от c124578
|
покажите как заставить getContent() возвращать значение через return значение xmlhttp.responseText.
|
Вернуть значение через return можно только, если ajax-запрос синхронный (третьим аргументом в xmlhttp.open передаём false), но в этом обычно нет необходимости. Текущая реализация вполне корректна, если не считать того, что вместо конструкции a = a + b следует использовать a += b.
Последний раз редактировалось crayday, 10.09.2011 в 13:06.
|
|

10.09.2011, 13:26
|
Интересующийся
|
|
Регистрация: 09.07.2011
Сообщений: 21
|
|
function Print () {
var c,d;
var T;
if (document.getElementById("mail")==null) {
c=document.createElement("div");
c.id="mail";
c.onclick=RemoveMail;
d=document.createElement("div");
d.id="CloseMail";
c.appendChild(d);
document.getElementById("box").appendChild(c);
function getContent(uriContent, TargetDiv){
var xmlhttp = getXmlHttp();
xmlhttp.open('POST', uriContent, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
document.getElementById(TargetDiv).innerHTML = document.getElementById(TargetDiv).innerHTML + xmlhttp.responseText;
}
else document.getElementById("mail").innerHTML = "404";
}
};
xmlhttp.send(null);
}
getContent("/1.php", "mail");
}
}
c - div, в который грузятся данные из 1.php, d - крестик в правом верхнем углу (закрыть), box - контейнер, в нем вся страница.
Креплю onclick к внешнему div, т.к на "крестик" почему-то не крепится событие.
И Вы написали, что все работает. У меня конкретно предыдущий код в IE8 не работает так, как я описал. IE Tester - тоже. У Вас в IE работает?
Спасибо за разъяснение по return. Жалко, конечно, по-моему удобно было бы.
Последний раз редактировалось c124578, 10.09.2011 в 13:28.
|
|

10.09.2011, 13:58
|
 |
Аспирант
|
|
Регистрация: 30.08.2011
Сообщений: 61
|
|
Сообщение от c124578
|
У меня конкретно предыдущий код в IE8 не работает так, как я описал. IE Tester - тоже. У Вас в IE работает?
|
ie9, ietester (ie5.5+). И то же самое касается кода, который выложен сейчас.
Следует выложить весь-весь-весь код, который используется, и затем, желательно, предоставить ссылку, либо же выслать архив.
|
|
|
|