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

HTML+CSS+JavaScript

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

 

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

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

тема: ajax не работает в ИЕ6
 
 автор: serjinio   (21.05.2009 в 22:13)   письмо автору
 
 

<script type="text/javascript" language="javascript">
// <![CDATA[
function CreateXmlHttp()
    {
        if(window.XMLHttpRequest) { return new XMLHttpRequest();}
        try { return  new ActiveXObject('MSXML2.XMLHTTP'); }
        catch(e) { return new ActiveXObject('Microsoft.XMLHTTP'); }     
    }    
var request = CreateXmlHttp()
function post_c(cat)
{
        var div_text = document.getElementById('div_error');
        //var selected = null;

  selected = cat.value;
  request.open('POST', 'cat_photos.php', true)
  request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.onreadystatechange = function() 
 {
   if ( request.readyState !== 4 ) return;
   if ( !request.status || request.status == 200 || request.status == 304 || request.status == 0 ) 
    { document.getElementById('c').innerHTML = request.responseText;}
   else   { div_text.innerHTML = 'Ошибка запроса XMLHttpRequest'; }    
  }
 request.send ('cat=' + selected);
 return;
}
// ]]> 
</script>
<form  method="post" action="">
<select  name="cat" id="cat" onchange="post_c(this);" onfocus="this.style.background='#68E060'" onblur="this.style.background='#FFFFFF'">
<optgroup label="Галерея">
<option   value="19"> •Фото 1</option>
<option   value="20"> •Фото 2</option>
<option   value="26"> •Фото 3</option>
</optgroup>
</select>
<p id="c"></p>

В мозиле и в опере работает отлично а в ие 6 ничего не выводит и пишет ошибка сценария...я так думаю что проблема с id полями в тегах option но как исправить не знаю .. помогите кто знает как исправить

  Ответить  
 
 автор: PAT   (22.05.2009 в 00:10)   письмо автору
 
   для: serjinio   (21.05.2009 в 22:13)
 

Я же вам давал КОНКРЕТНЫЙ РАБОТАЮЩИЙ ПРИМЕР - http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=64986&page=1

Но...
Вам же обязательно надо и статусы проверить (а на фига это надо - вы хоть знаете?)
И вам же обязательно надо втюхать самый безобразно работающий метод Javascript'a try {} catch {}
И уж куда вам деться именно без метода POST?
Метод GET - это же для лохов, а вы у нас - "конкретный пацан", да? :-)


Умнее, чем есть на самом деле, надо прикидываться только тогда, когда тараканов травите - пусть тараканы думают, что вы умный и всё-равно так или иначе их "достанете" - не дустом, так дихлофосом... тогда они уйдут жить к соседу.
Во всех остальных случаях в жизни надо быть САМИМ СОБОЙ.
И в код "втюхивать" не всё то, что где-либо увидели, а только то, что ПОНИМАЕТЕ.


При использовании метода POST метод send ОБЯЗАТЕЛЬНО должен посылать параметры формы (name=value [&name2=value2...]).

Он у вас их и посылает.

В FireFox'e и в Opera.

А в 6-ом Explorer'e - не посылает.
Потому что Explorer умеет это делать только начиная с 7-й версии - можете удостовериться в этом.

  Ответить  
 
 автор: serjinio   (22.05.2009 в 08:44)   письмо автору
 
   для: PAT   (22.05.2009 в 00:10)
 

Переделал на GET все запустилось ,я и не знал о таких нюансах в ИЕ6 спасибо PAT за помощь

  Ответить  
 
 автор: sl1p   (22.05.2009 в 09:20)   письмо автору
 
   для: PAT   (22.05.2009 в 00:10)
 

Не может такого быть, я когда чат на аяксе делал, всё нормально работало с Пост методом и в ИЕ6.

  Ответить  
 
 автор: psychomc   (22.05.2009 в 10:14)   письмо автору
 
   для: sl1p   (22.05.2009 в 09:20)
 

аналогично.

  Ответить  
 
 автор: PAT   (22.05.2009 в 11:42)   письмо автору
 
   для: psychomc   (22.05.2009 в 10:14)
 

Согласен. Именно - "аналогично".

Фразу "send was introduced in Windows Internet Explorer 7" разработчики этого самого Explorer'a на своём собственном сайте http://msdn.microsoft.com/en-us/library/ms536736(VS.85).aspx вставили по собственному скудоумию?
Разработчики, значится, даже и не догадывались, что send и так прекрасно работает и зря деньги от Билла Гейтса за новую версию получили? :-)

[поправлено модератором]

  Ответить  
 
 автор: psychomc   (22.05.2009 в 12:28)   письмо автору
 
   для: PAT   (22.05.2009 в 11:42)
 

у меня IE 6 и все прекрасно работает

передаю так

xmlHttp.open('POST', sendHandler, true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(params);

Вы сами попробуйте и узнаете.

из Вас получился бы очень брутальный препод :)

  Ответить  
 
 автор: ddhvvn   (22.05.2009 в 12:58)   письмо автору
 
   для: PAT   (22.05.2009 в 11:42)
 

я что-то пропустил, Вы утверждаете, что в ИЕ6 принципиально нельзя передать данные методом POST при работе с AJAX?

  Ответить  
 
 автор: GeorgeIV   (22.05.2009 в 17:52)   письмо автору
 
   для: PAT   (22.05.2009 в 11:42)
 

У меня тоже уже несколько лет назад POST срабатывал, когда еще и семерки не было. Нельзя верить всему, что Майкрософт пишет.

  Ответить  
 
 автор: Dimka31   (22.05.2009 в 18:29)   письмо автору
 
   для: PAT   (22.05.2009 в 11:42)
 

Не обманывайте людей ; )

Сам писал для нескольких интернет-магазинов. http://pro-avtokresla.ru/catalog/romer/duo_plus и в 6 тоже работает!

  Ответить  
 
 автор: serjinio   (22.05.2009 в 21:39)   письмо автору
 
   для: Dimka31   (22.05.2009 в 18:29)
 

При передаче постом сервер отвечает нормально те
var response = request.responseText;
alert (response);

все выводится то что вернул сервер...но когда делаешь
{ document.getElementById('c').innerHTML = response;} 

ИЕ6 пишет ошибка сценария...в мозиле и опере без проблем
В самом скрипте ..который подгружается отдаю правильные хидеры те чтоб не кэшировалось и кодировку..
     header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
     header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
     header ("Cache-Control: no-cache, must-revalidate");
     header ("Pragma: no-cache");
//header('Content-Type: text/html; charset=utf-8');
header('content-type: application/x-javascript; charset=utf-8');

не знаю точно в чем причина но переделал на гет
function post_c(x)
{
   var div_text = document.getElementById('div_error');
   request.open ('get','cat_photos.php?cat=' + encodeURIComponent (x.options [x.selectedIndex].value), true);
  request.onreadystatechange = function() 
  {
   if ( request.readyState !== 4 ) return;
   if ( !request.status || request.status == 200  ) {document.getElementById('c').innerHTML = request.responseText;    }
   else   { div_text.innerHTML = 'Ошибка запроса XMLHttpRequest'; }    
  }
 request.send (null);return;
}

и ИЕ6 стал нормально выводить селекты...мистика....

  Ответить  
 
 автор: psychomc   (23.05.2009 в 00:08)   письмо автору
 
   для: serjinio   (22.05.2009 в 21:39)
 

document.getElementById('c').innerHTML = response;

может проблема в самом id тогда?

  Ответить  
 
 автор: GeorgeIV   (25.05.2009 в 10:41)   письмо автору
 
   для: psychomc   (23.05.2009 в 00:08)
 

"c" - опасный символ, на одной клавише и русская и латинская версии, легко ошибиться и невозможно заметить на глаз.

  Ответить  
 
 автор: ExtraBrain   (10.06.2009 в 17:48)   письмо автору
 
   для: serjinio   (21.05.2009 в 22:13)
 

function SendZapros(url) {
 if(window.XMLHttpRequest) {                    // Для всех кроме IE
    req=new XMLHttpRequest();
    req.onreadystatechange=GetOtvet;    // Функция принимающая ответ на запрос
    req.open("GET",url,true);
    req.send(null);
 }
 else if(window.ActiveXObject) {
    req=new ActiveXObject("Microsoft.XMLHTTP"); // Для IE
    if(req){
      req.onreadystatechange=GetOtvet;    // Функция принимающая ответ на запрос
      try { req.open("GET",url,true); } catch(e) { ajaxerr++; }
      try { req.send(null); } 
      catch(e) { ajaxerr++; if(ajaxerr<3) SendZapros(url+'&_c_='+Math.random()); else alert(e); }
    }
    else {
       alert("Обьект не создан");
    }
 }

}


<input type="button" value="    Ok    " onclick="ajaxerr=0;SendZapros('ajax.php?a='+document.getElementById('numa').value+'&b='+document.getElementById('numb').value);">


В некоторых IE6 у меня выпендривается AJAX, не хочет с первого раза нормально отрабатывать. Так вот как пришлось его лечить.

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

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