Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.09.2011, 20:52
Интересующийся
Отправить личное сообщение для c124578 Посмотреть профиль Найти все сообщения от c124578
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 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 данных. А тут он ни к месту.
Ответить с цитированием
  #3 (permalink)  
Старый 09.09.2011, 21:40
Аватар для yashka525
Mr. Jacob
Отправить личное сообщение для yashka525 Посмотреть профиль Найти все сообщения от yashka525
 
Регистрация: 20.01.2011
Сообщений: 194

Сообщение от c124578
echo '<form>fffffff<form>';
1. Закройте тег </form>
2. Андрей Параничев опередил =)
Ответить с цитированием
  #4 (permalink)  
Старый 09.09.2011, 23:04
Интересующийся
Отправить личное сообщение для c124578 Посмотреть профиль Найти все сообщения от c124578
 
Регистрация: 09.07.2011
Сообщений: 21

первое сообщение неправильно я написал, исправил.
тег закрыт, multipart/form-data нет; в таком виде не работает. В общем, вроде все правильно, а в IE не работает.
Ответить с цитированием
  #5 (permalink)  
Старый 10.09.2011, 00:42
Аватар для crayday
Аспирант
Отправить личное сообщение для crayday Посмотреть профиль Найти все сообщения от crayday
 
Регистрация: 30.08.2011
Сообщений: 61

Хотелось бы увидеть весь код.
Скажем, если заменить form на div (или на вообще какой-нибудь выдуманный тег, но всё содержимое при этом оставить в прежнем объёме), то ошибка возникать не будет?
Ответить с цитированием
  #6 (permalink)  
Старый 10.09.2011, 01:46
Аватар для yashka525
Mr. Jacob
Отправить личное сообщение для yashka525 Посмотреть профиль Найти все сообщения от yashka525
 
Регистрация: 20.01.2011
Сообщений: 194

Сообщение от c124578
ошибка возникает при обращении к xmlhttp.responseText
Ну так дайте кусок этого кода.
Ответить с цитированием
  #7 (permalink)  
Старый 10.09.2011, 11:20
Интересующийся
Отправить личное сообщение для c124578 Посмотреть профиль Найти все сообщения от c124578
 
Регистрация: 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.
Ответить с цитированием
  #8 (permalink)  
Старый 10.09.2011, 13:01
Аватар для crayday
Аспирант
Отправить личное сообщение для crayday Посмотреть профиль Найти все сообщения от crayday
 
Регистрация: 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.
Ответить с цитированием
  #9 (permalink)  
Старый 10.09.2011, 13:26
Интересующийся
Отправить личное сообщение для c124578 Посмотреть профиль Найти все сообщения от c124578
 
Регистрация: 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 (permalink)  
Старый 10.09.2011, 13:58
Аватар для crayday
Аспирант
Отправить личное сообщение для crayday Посмотреть профиль Найти все сообщения от crayday
 
Регистрация: 30.08.2011
Сообщений: 61

Сообщение от c124578
У меня конкретно предыдущий код в IE8 не работает так, как я описал. IE Tester - тоже. У Вас в IE работает?
ie9, ietester (ie5.5+). И то же самое касается кода, который выложен сейчас.

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кеширование HTML переданого через ajax BorisBritva jQuery 6 02.04.2011 01:23
Вызов функции печати страницы полученной через AJAX Garik AJAX и COMET 4 02.03.2011 17:05
Послать форму загруженную через ajax в div используя ajax ncux jQuery 2 16.08.2010 17:36
Объясните как вызывается ajax скрипт AddressBook из формы prog90 AJAX и COMET 3 06.06.2009 16:12
XMLHTTPRequest передача имя через POST dds AJAX и COMET 0 14.08.2008 14:44