Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работает запрос на получение конента без загрузки страницы в IE
 
 автор: amigo62   (20.12.2008 в 14:08)   письмо автору
 
 

Всем доброго времени суток!
Прописал в странице вот такой код:


<script language="javascript">
var req = null;  

if (window.XMLHttpRequest) {   req = new XMLHttpRequest(); }  
else if (window.ActiveXObject) {
 try { req = new ActiveXObject(\'Msxml2.XMLHTTP\') } catch (e) {  
    try { req= new ActiveXObject(\'Microsoft.XMLHTTP\') } catch (e) {}  
 }  
}  
function handleResponse() {   
    try{   
    if((req.readyState == 4) && (req.status == 200)){   
        var response = req.responseText;   
      document.getElementById("answer").innerHTML = response;   
        }   
  }  catch(e){}   
    finally{}   
}  

///////// 

function send(txt) {
document.getElementById("answer").innerHTML ="Подождите...";  
    req.open("GET", txt);   
    req.onreadystatechange = handleResponse; 
    req.send();   
}  
</script>

вписал в страницу ссылку
<a href="?act=edit&id=2" onclick="send(this.href);return false;">редактировать</a>

и контейнер для вывода результата
<div id="answer">
</div>

в Опере все работает нормально, без обновления страницы идет запрос на ?act=edit&id=2, выводится текст "Подождите..." и через некоторое время на его месте появляется запрошеный контент.
В IE выводится надпись "Подождите...", уходит запрос и больше ничего не происходит. "Подождите..." висит, пока не обновишь страницу. Какой-то косяк в сценарии или вообще нужно искать кроссбраузерный эквивалент?

  Ответить  
 
 автор: Николай2357   (20.12.2008 в 16:24)   письмо автору
 
   для: amigo62   (20.12.2008 в 14:08)
 

Попрбуйте
    req.open("GET", txt, true);    
    req.onreadystatechange = handleResponse;  
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    req.send(null);
у меня как то была такая проблемка

  Ответить  
 
 автор: amigo62   (20.12.2008 в 17:12)   письмо автору
 
   для: Николай2357   (20.12.2008 в 16:24)
 

Исправил. Ничего не изменилось :(

  Ответить  
 
 автор: Николай2357   (20.12.2008 в 18:43)   письмо автору
 
   для: amigo62   (20.12.2008 в 17:12)
 

Вот этот попробуйте. Вроде не подводил.
<script type="text/javascript">
var req = Create(); 
function Create()

    if(navigator.appName == "Microsoft Internet Explorer")
 req = new ActiveXObject("Microsoft.XMLHTTP"); 
else 
req = new XMLHttpRequest(); 

    return req; 

function send()
{
req.open('post', 'test.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
  req.send();             

function Refresh()

var a = req.readyState; 

    if ( a == 4 )
window.document.getElementById('answer').innerHTML = req.responseText;            
}
</script>
<div id="answer"> 
</div>
<a href="?" onclick="send();return false;">редактировать</a>

test.php
<?
echo "Вроде работает...";

  Ответить  
 
 автор: amigo62   (20.12.2008 в 19:25)   письмо автору
 
   для: Николай2357   (20.12.2008 в 18:43)
 

дебаггер показывает ошибку в строке
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

странно. И содержимое загружает как страницу, а не как элемент

  Ответить  
 
 автор: Николай2357   (20.12.2008 в 20:07)   письмо автору
 
   для: amigo62   (20.12.2008 в 19:25)
 

А у Вас кодировка то какая? У меня под утф давным давно работает и ни одного сбоя не было.

  Ответить  
 
 автор: amigo62   (20.12.2008 в 20:40)   письмо автору
 
   для: Николай2357   (20.12.2008 в 20:07)
 

Не понял, а как кдировка влияет? Можете пояснить подробнее, мне важно понять эту схему?

  Ответить  
 
 автор: Николай2357   (20.12.2008 в 20:44)   письмо автору
 
   для: amigo62   (20.12.2008 в 20:40)
 

Вот, специально для Вас тык
А кодировка, если Вы не знаете что такое, наверняка у Вас виндовская. Поменяйте в моём скрипте utf-8 на windows-1251 и попробуйте. Я в винде не работаю, за результат не ручаюсь.

  Ответить  
 
 автор: amigo62   (20.12.2008 в 21:03)   письмо автору
 
   для: Николай2357   (20.12.2008 в 20:44)
 

спасибо. да, у меня ср1251

  Ответить  
 
 автор: amigo62   (20.12.2008 в 21:27)   письмо автору
 
   для: amigo62   (20.12.2008 в 21:03)
 

Вобщем когда пытаюсь передать урл как переменную, начинаются мороки.

  Ответить  
 
 автор: Николай2357   (21.12.2008 в 06:05)   письмо автору
 
   для: amigo62   (20.12.2008 в 21:27)
 

Надо кодировать урл, тогда будет норм. Мороки так же возникнут, если Вы захотите передать амперсанд или плюс допустим Не пройдёт прямая передача скрипта, да и много еще тонкостей. В моём примере просто голый запрос, по этому Вам надо еще подстроить его под свои нужды. Если нет желания делать самому, юзайте jQuery или другой фреймворк. Мне это как то не по нутру, потому что из за простенького запроса таскать 40 - 100kb груза как то не чесно по отношению к юзеру...

  Ответить  
 
 автор: amigo62   (21.12.2008 в 11:44)   письмо автору
 
   для: Николай2357   (21.12.2008 в 06:05)
 

Нет, пользоваться готовеньким - это не моё :)
Ваш ваиант работает и в опере, и в ИЕ. А вот если исправить чуть:
<script type="text/javascript">
var req = Create(); 
function Create()

    if(navigator.appName == "Microsoft Internet Explorer")
 req = new ActiveXObject("Microsoft.XMLHTTP"); 
else 
req = new XMLHttpRequest(); 

    return req; 

function send(txt)
{
req.open('post', txt , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=win-1251");
  req.send();             

function Refresh()

var a = req.readyState; 

    if ( a == 4 )
window.document.getElementById('answer').innerHTML = req.responseText;            
}
</script>
<div id="answer"> 
</div>
<a href="?" onclick="send('http://localhost/1.txt');return false;">редактировать</a>

в опере работать отказывается, только обновляет страницу. Пытаюсь вникнуть в спецификацию...))

  Ответить  
 
 автор: amigo62   (21.12.2008 в 12:09)   письмо автору
 
   для: amigo62   (21.12.2008 в 11:44)
 

Понял в чем дело.
message: Security violation

страница лежала на диске, а запрос отправлялся на хост.
Когда выложил страницу на хост, стало все ок)))
Николай2357, спасибо за разъяснения и примеры:)

  Ответить  
 
 автор: amigo62   (21.12.2008 в 12:36)   письмо автору
 
   для: amigo62   (21.12.2008 в 12:09)
 

Оказывается, еще не все :(
function Refresh(){
    if ((req.readyState == 4) && (req.status == 200))
document.getElementById("answer").innerHTML = req.responseText;
}

в выделенной строке ИЕ упрямо выдает ошибку.
Системная ошибка -1072896658
происходит это только на хостинге. локально все ок

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования