Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: запрос AJAX не работает в IE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: в Опере всё норм
Михаил
Отправлено: 10 Июня, 2010 - 07:55:10
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Здравствуйте!

Проблема следущая:

имеется функция, которая отправляет на сервер имя выбранной радио-кнопки, а в ПХП-скрипте выполняется выборка из БД в зависимости от выбранной радио-кнопки:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var xmlhttp;
  3.  
  4. function showresult(str1, str2)
  5.         {
  6.                 xmlhttp=GetXmlHttpObject();
  7.                 if (xmlhttp==null)
  8.                 {
  9.                         alert ("Browser does not support HTTP Request");
  10.                         return;
  11.                 }
  12.         var mes;
  13.         var rb = document.getElementById("f1");
  14.         if (rb[0].checked===true) mes = rb[0].value;
  15.         if (rb[1].checked===true) mes = rb[1].value;
  16.         if (rb[2].checked===true) mes = rb[2].value;
  17.         document.getElementById('text_result2').style.visibility='hidden';
  18.         document.getElementById('text_result2').innerHTML="";
  19.         document.getElementById('text_result').style.visibility='visible';
  20.         document.getElementById("loading").style.visibility='visible';
  21.        
  22.         var url="result.php";
  23.         url=url+"?units="+mes+"&q="+str2;
  24.         url=url+"&sid="+Math.random();
  25.         xmlhttp.onreadystatechange=stateChanged;
  26.         xmlhttp.open("get",url,true);
  27.         xmlhttp.send(null);
  28.         }      
  29.        
  30. function stateChanged()
  31.         {
  32.         if (xmlhttp.readyState==4)
  33.                 {
  34.                 document.getElementById("loading").style.visibility='hidden';
  35.                 document.getElementById("text_result").innerHTML=xmlhttp.responseText;
  36.  
  37.                 }
  38.         }
  39.  
  40. function GetXmlHttpObject()
  41.         {
  42.         if (window.XMLHttpRequest)
  43.                 {
  44.         // code for IE7+, Firefox, Chrome, Opera, Safari
  45.                 return new XMLHttpRequest();
  46.                 }
  47.         if (window.ActiveXObject)
  48.                 {
  49.         // code for IE6, IE5
  50.                 return new ActiveXObject("Microsoft.XMLHTTP");
  51.                 }
  52.         return null;
  53. }
  54.  


Проблема в том, что в IE это не работает, то есть не выводятся данные с сервера. если после 33 строки добавить alert("test"); сообщение выводиться будет
И еще: IE начинает реагировать не сразу после выбора радио-кнопки, а после дополнительного щелчка мышкой.
В чём может быть проблема?

Заранее спасибо Улыбка

P.S. В Опере всё работает нормально

(Отредактировано автором: 10 Июня, 2010 - 10:17:03)

 
 Top
JustUserR
Отправлено: 10 Июня, 2010 - 11:24:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Михаил пишет:
И еще: IE начинает реагировать не сразу после выбора радио-кнопки, а после дополнительного щелчка мышкой.
В чём может быть проблема?
Вам нужно установить обработчик дополнительного события выбора радио-кнопки по которому будет вызов соответствующей функции - вы можете установить его как статический или динамически генерируемый вариант аттбирута тега флажка - или же как общую функцию document.onevent* с секцией обработки элемента по имени или идентификатору
Попробуйте также добавить в блок обработки условия readystatechange строку document.all["text_result"].innerHTML=xmlhttp.responseText и сразу после нее alert(document.all["text_result"].innerHTML) Таким образом вы сможете отследить какое значение реально устанавливается в div-блок
Причинами проблемы может быть наличие определенного JS-кода во вставляемом HTML-коде - или наличии каких-то событий которые сбрасывают значение div-блока или не дают его изменить


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Михаил
Отправлено: 10 Июня, 2010 - 12:43:59
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Цитата:
Вам нужно установить обработчик дополнительного события выбора радио-кнопки по которому будет вызов соответствующей функции

В файле index.php обработчики выбора радио-кнопки есть:

CODE (htmlphp):
скопировать код в буфер обмена
  1.         <input type='radio' name=units id=units value='PS' onChange='JavaScript:showresult(this.value, document.getElementById(\"inputString\").value)'> ПС<Br>
  2.         <input type='radio' name=units id=units value='fiders' onChange='JavaScript:showresult(this.value, document.getElementById(\"inputString\").value)'> Фидер<Br>
  3.         <input type='radio' name=units id=units value='TP' onChange='JavaScript:showresult(this.value, document.getElementById(\"inputString\").value)'> ТП<Br>


Цитата:
Попробуйте также добавить в блок обработки условия readystatechange строку document.all["text_result"].innerHTML=xmlhttp.responseText и сразу после нее alert(document.all["text_result"].innerHTML)


попробовал - выводится пустое сообщение. Огорчение

может быть, что в ИЕ данные отправляются не в той кодировке и следовательно на сервере запрос выдает пустое значение?
если в этом дело то где кодировку задать?

В опере же всё работает...
А у нас на предприятии все в основном ИЕ пользуются Огорчение

(Отредактировано автором: 10 Июня, 2010 - 12:46:18)

 
 Top
JustUserR
Отправлено: 11 Июня, 2010 - 16:41:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Михаил пишет:
Может быть, что в ИЕ данные отправляются не в той кодировке и следовательно на сервере запрос выдает пустое значение?
Если в этом дело то где кодировку задать?
Вообще если данные пришли и находятся в определеном свойстве в AJAX-объекте - то в зависимости от кодировки они конечно могут отображаться неверно при копировании их в div-объект - но если сделать предварительное экранирование с помощью escape то при выводе обязательно должны показаться шестнадцатиричные коды передаваемых символов
Проблема может быть еще в двух местах - например значение свойства responseText просто не определено по принципе отсутствия прав на AJAX-запрос и данной HTML-страницы - или попросту потому что данные хранятся в этом объекте в другом свойстве Другим вариантом может быть то что получаемый текст является HTML-кодом с JS-скриптом - и после его вставки в div-блок JS-обработчик получает какую-то ошибку наприсмер обращение к несущкствующей переменной и завершается


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Михаил
Отправлено: 17 Июня, 2010 - 09:04:18
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Но ведь не работает только в ИЕ
В Firefox и Opera нормально

может в функции GetXmlHttpObject() какое-то условие не дописал?

p.s. Пробовал добавлять еще такое условие - безрезультатно:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if (window.ActiveXObject)
  3. {
  4.         return new ActiveXObject("Msxml2.XMLHTTP");
  5. }
  6.  
 
 Top
JustUserR
Отправлено: 17 Июня, 2010 - 11:41:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Михаил пишет:
Может в функции GetXmlHttpObject() какое-то условие не дописал?
Разница между браузерами заключается не только в способе обращения к AJAX-объекту - но также и в DOM-моделе и моделе событий и обработке встроенных динамических <script>-тегов По этой причине лучше проэкранировать содержимое получаемой страницы и посмотреть нет ли в нем ничего особенного - поскольку если в нем встречается какой-то JS-скрипт даже в видк on_event* у какого-то тега и когда он вставляетя в реальный div-блок то начинает исполняется - и если встроенный JS-скрипт содержит ошибку то может остановиться весь документ Также проверьте нет ли там незакрытых тегов и тд


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
UncleDeaFF
Отправлено: 17 Июня, 2010 - 14:03:24
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2007  
Откуда: Пермь


Помог: -1 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var Request = false;
  3. if (window.XMLHttpRequest)
  4.  {
  5.    Request = new XMLHttpRequest();
  6.  }
  7. else if (window.ActiveXObject)
  8.  {
  9.    try
  10.     {
  11.       Request = new ActiveXObject("Microsoft.XMLHTTP");
  12.      }
  13.     catch (CatchException)
  14.      {
  15.        Request = new ActiveXObject("Msxml2.XMLHTTP");
  16.       }
  17.  }
  18. if (!Request)
  19.  {
  20.    alert("Невозможно создать XMLHttpRequest-соединение");
  21.   }
  22.  return Request;
  23. }
  24.  


как-то так Улыбка
 
 Top
Михаил
Отправлено: 18 Июня, 2010 - 10:36:02
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




Сделал отладку в ИЕ.
высветилось 8 ошибок
Вот сам файл index.php:
CODE (html):
скопировать код в буфер обмена
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5.  
  6.  
  7.  
  8. <script type="text/javascript" src="result.js"></script>
  9.         <script type='text/javascript' src='..//sys/jquery-1.2.6.js'></script>
  10.  
  11.         </head>
  12.         <body onload = 'document.getElementById("inputString").focus()'>
  13.  
  14.         <div align=center>
  15.  
  16.         <form name=form1 id='f1' action = 'db.php'>
  17.         <b>Вид устройства:</b><Br>
  18.         <input type='radio' name=units id=units value='PS' onChange='JavaScript:showresult(this.value, document.getElementById("inputString").value)'> ПС<Br>
  19.         <input type='radio' name=units id=units value='fiders' onChange='JavaScript:showresult(this.value, document.getElementById("inputString").value)'> Фидер<Br>
  20.         <input type='radio' name=units id=units value='TP' onChange='JavaScript:showresult(this.value, document.getElementById("inputString").value)'> ТП<Br>
  21.         <input type='text'  id='inputString' name='u_name' onkeyup='JavaScript:showresult(document.getElementById("units").value, this.value);' name='UN' autocomplete='off'>
  22.         <input type=hidden name='unit_id' id='unit_id'>
  23.         <input type='button' value='OK' onClick = 'JavaScript:finalresult(document.getElementById("unit_id").value, document.getElementById("inputString").value)'>
  24.         </form>
  25.         <div id='suggestions' style='display: none;'>
  26.     <div id='autoSuggestionsList'>
  27.     </div>
  28.     </div>
  29.         </div>
  30.  
  31.         <div id=loading align=center style='visibility:hidden'><br><img src=1.gif><br></div>
  32.  
  33.  
  34.  
  35.         <div id=text_result ></div>
  36.         <div id=text_result2 ></div>
  37.  
  38. </body>
  39. </html>
  40.  
  41.  


А вот ошибки:

Предполагается наличие объекта ajax, строка 21 символ 1
Предполагается наличие объекта ajax, строка 21 символ 1
Предполагается наличие объекта ajax, строка 21 символ 1
Предполагается наличие объекта ajax, строка 21 символ 1
Предполагается наличие объекта ajax, строка 21 символ 1
Предполагается наличие объекта ajax, строка 21 символ 1
Предполагается наличие объекта ajax, строка 21 символ 204
Предполагается наличие объекта ajax, строка 21 символ 204

Ничего необычного в этих строках найти не могу...(((

(Отредактировано автором: 18 Июня, 2010 - 10:36:58)

 
 Top
JustUserR
Отправлено: 18 Июня, 2010 - 13:24:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Михаил пишет:
Предполагается наличие объекта ajax, строка 21 символ 1
При использовании on_event* обработчиков необходимо учитыать что находящийся внутри них код уже является исполняемым JS-кодом - и поэтому указание протокола javascript: здесь неуместно поскольку здесь не используется никакой URI-компонент Помните также что JS-код внутри on_event* аттрибутов должен соответствовать HTML-экранировке и не быть проэкранированным лишним уровнем с точки зрения JS-кода


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Михаил
Отправлено: 18 Июня, 2010 - 13:57:45
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010  
Откуда: Армавир, Россия


Помог: 0 раз(а)




JustUserR пишет:
Помните также что JS-код внутри on_event* аттрибутов должен соответствовать HTML-экранировке и не быть проэкранированным лишним уровнем с точки зрения JS-кода


а как это можно проверить?
 
 Top
JustUserR
Отправлено: 19 Июня, 2010 - 12:11:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Михаил пишет:
А как это можно проверить?
Это означает что когда вы пишите on_event* аттрибут - как в вашем случае это набор аттрибутов onchange="JS-code" - то он должен отвечать следующим требованиям Первоначально такой аттбирут обрабатывается HTML-парсером и соответственно все содержимое такого аттрибута должно подлежать HTML-экранировке - конкретно он не должен содержать таких же кавычек в которые обрамлен и некоторых HTML-сущностей После такой обработки код внутри аттбирута передается JS-интерпретатору - соответственно он должен по правилам соответствовать JS-коду как будто бы он был размещен внутри функции в разделе <script> - причем он не может содержать кавычки в которые заключен html-аттрибут но другой вид кавычек может содержаться и экранироваться нужное число раз - а если имеется несколько JS-инструкций или блоков то они должны быть отделены точкой с запятой
То есть общий вид аттрибута такой on_event="somefunction('somestring \'encoded\' \\\' two-encoded \\\' '); something_else()"


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Luxor
Отправлено: 12 Июля, 2010 - 10:19:58
Post Id



Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Июль 2010  
Откуда: Луганск


Помог: 0 раз(а)




Пробуй вот это. Это точно поможет. Такая проблема у меня была, пришлось написать самому.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var xmlHttp = false;
  3. try {
  4.   xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
  5. } catch (e) {
  6.   try {
  7.     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  8.   } catch (e2) {
  9.     xmlHttp = false;
  10.   }
  11. }
  12. if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  13.   xmlHttp = new XMLHttpRequest();
  14. }
  15.  

(Отредактировано автором: 12 Июля, 2010 - 10:21:14)



-----
http://tak[dot]ru/partner.php?id=354053 1 руб за клик.проверенно. хотя если из 1 подсети кликнули, то от 20 до 75 коп...
 
 Top
JustUserR
Отправлено: 13 Июля, 2010 - 02:19:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Luxor пишет:
Пробуй вот это. Это точно поможет. Такая проблема у меня была, пришлось написать самому.
Дело в том что в оригинальном вопросе сам AJAX-объект был доступен и запрос на удаленный web-сервер успешно совершался - проблема была только с подстановкой результирующего HTML-документа в структуру текущего из-за наличия конфликтов при динамическом пересечении JS-скриптов этих страниц В таком случае можно использовать либо полное экранирование - либо же предварительный анализ вставляемых данных и их пошаговая интерпретация


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB