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
Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010 Откуда: Армавир, Россия
Помог: 0 раз(а)
Здравствуйте!
Проблема следущая:
имеется функция, которая отправляет на сервер имя выбранной радио-кнопки, а в ПХП-скрипте выполняется выборка из БД в зависимости от выбранной радио-кнопки:
Проблема в том, что в IE это не работает, то есть не выводятся данные с сервера. если после 33 строки добавить alert("test"); сообщение выводиться будет
И еще: IE начинает реагировать не сразу после выбора радио-кнопки, а после дополнительного щелчка мышкой.
В чём может быть проблема?
Покинул форум
Сообщений всего: 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/
Михаил
Отправлено: 10 Июня, 2010 - 12:43:59
Гость
Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010 Откуда: Армавир, Россия
Помог: 0 раз(а)
Цитата:
Вам нужно установить обработчик дополнительного события выбора радио-кнопки по которому будет вызов соответствующей функции
В файле index.php обработчики выбора радио-кнопки есть:
Попробуйте также добавить в блок обработки условия readystatechange строку document.all["text_result"].innerHTML=xmlhttp.responseText и сразу после нее alert(document.all["text_result"].innerHTML)
попробовал - выводится пустое сообщение.
может быть, что в ИЕ данные отправляются не в той кодировке и следовательно на сервере запрос выдает пустое значение?
если в этом дело то где кодировку задать?
В опере же всё работает...
А у нас на предприятии все в основном ИЕ пользуются
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Михаил пишет:
Может быть, что в ИЕ данные отправляются не в той кодировке и следовательно на сервере запрос выдает пустое значение?
Если в этом дело то где кодировку задать?
Вообще если данные пришли и находятся в определеном свойстве в AJAX-объекте - то в зависимости от кодировки они конечно могут отображаться неверно при копировании их в div-объект - но если сделать предварительное экранирование с помощью escape то при выводе обязательно должны показаться шестнадцатиричные коды передаваемых символов
Проблема может быть еще в двух местах - например значение свойства responseText просто не определено по принципе отсутствия прав на AJAX-запрос и данной HTML-страницы - или попросту потому что данные хранятся в этом объекте в другом свойстве Другим вариантом может быть то что получаемый текст является HTML-кодом с JS-скриптом - и после его вставки в div-блок JS-обработчик получает какую-то ошибку наприсмер обращение к несущкствующей переменной и завершается
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Михаил
Отправлено: 17 Июня, 2010 - 09:04:18
Гость
Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010 Откуда: Армавир, Россия
Помог: 0 раз(а)
Но ведь не работает только в ИЕ
В Firefox и Opera нормально
может в функции GetXmlHttpObject() какое-то условие не дописал?
p.s. Пробовал добавлять еще такое условие - безрезультатно:
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Михаил пишет:
Может в функции GetXmlHttpObject() какое-то условие не дописал?
Разница между браузерами заключается не только в способе обращения к AJAX-объекту - но также и в DOM-моделе и моделе событий и обработке встроенных динамических <script>-тегов По этой причине лучше проэкранировать содержимое получаемой страницы и посмотреть нет ли в нем ничего особенного - поскольку если в нем встречается какой-то JS-скрипт даже в видк on_event* у какого-то тега и когда он вставляетя в реальный div-блок то начинает исполняется - и если встроенный JS-скрипт содержит ошибку то может остановиться весь документ Также проверьте нет ли там незакрытых тегов и тд
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
UncleDeaFF
Отправлено: 17 Июня, 2010 - 14:03:24
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2007 Откуда: Пермь
Предполагается наличие объекта ajax, строка 21 символ 1 Предполагается наличие объекта ajax, строка 21 символ 1 Предполагается наличие объекта ajax, строка 21 символ 1 Предполагается наличие объекта ajax, строка 21 символ 1 Предполагается наличие объекта ajax, строка 21 символ 1 Предполагается наличие объекта ajax, строка 21 символ 1 Предполагается наличие объекта ajax, строка 21 символ 204 Предполагается наличие объекта ajax, строка 21 символ 204
Ничего необычного в этих строках найти не могу...(((
Покинул форум
Сообщений всего: 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/
Михаил
Отправлено: 18 Июня, 2010 - 13:57:45
Гость
Покинул форум
Сообщений всего: 112
Дата рег-ции: Июнь 2010 Откуда: Армавир, Россия
Помог: 0 раз(а)
JustUserR пишет:
Помните также что JS-код внутри on_event* аттрибутов должен соответствовать HTML-экранировке и не быть проэкранированным лишним уровнем с точки зрения JS-кода
а как это можно проверить?
JustUserR
Отправлено: 19 Июня, 2010 - 12:11:55
Активный участник
Покинул форум
Сообщений всего: 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/
Luxor
Отправлено: 12 Июля, 2010 - 10:19:58
Новичок
Покинул форум
Сообщений всего: 13
Дата рег-ции: Июль 2010 Откуда: Луганск
Помог: 0 раз(а)
Пробуй вот это. Это точно поможет. Такая проблема у меня была, пришлось написать самому.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Luxor пишет:
Пробуй вот это. Это точно поможет. Такая проблема у меня была, пришлось написать самому.
Дело в том что в оригинальном вопросе сам AJAX-объект был доступен и запрос на удаленный web-сервер успешно совершался - проблема была только с подстановкой результирующего HTML-документа в структуру текущего из-за наличия конфликтов при динамическом пересечении JS-скриптов этих страниц В таком случае можно использовать либо полное экранирование - либо же предварительный анализ вставляемых данных и их пошаговая интерпретация
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.