[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Простейший пример AJAX не хочет работать в IE
gidrosoldat
Доброе время суток!
Простейший пример AJAX не хочет работать в IE 9 (с FF и Оперой все ок), возможно проблема с инициализацией XmlHTTP.
Хтмл код:
<html>
<head>
<script
type="text/javascript" src="http://kohana.loc/media/js/ajax/request.js"></script>
</head>
<body>
<div
id="status"></div>
<input
type='text' id='myid'><br>
<input
type="button" value="тыц" onClick="start()">
</body>
</html>

request.js:
function getXmlHttp() {
var xmlhttp;

try {
xmlhttp = new ActiveXObject("Msxm12.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}


if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}

return xmlhttp;
}

function start() {
var req = getXmlHttp();

var statusElem = document.getElementById('status');
statusElem.innerHTML = '<img src="/media/images/animation/loading.gif">';

var text = document.getElementById('myid').value;
query = 'txt=' + encodeURIComponent(text);


req.onreadystatechange = function () {

if (req.readyState == 4) {
var b = req.responseText;
statusElem.innerHTML = b;
}
}


req.open('POST', 'http://kohana.loc/ajax.php', true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);

}

Покажите где ошибка



Спустя 6 минут, 16 секунд (21.02.2012 - 12:31) johniek_comp написал(а):
используй библиотеку ajaxa через джейквери

Спустя 1 час, 18 минут, 52 секунды (21.02.2012 - 13:50) gidrosoldat написал(а):
johniek_comp, тоже об этом думал. JQuery кросбраузерный?

Спустя 23 минуты, 19 секунд (21.02.2012 - 14:13) inpost написал(а):
function createXMLHttp() {
if(typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest();
} else if(window.ActiveXObject) {
var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
"MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp",
"Microsoft.XMLHttp"
];
for (var i = 0; i < aVersions.length; i++) {
try {
var oXmlHttp = new ActiveXObject(aVersions[i]);
return oXmlHttp;
} catch (oError) {
}
}

throw new Error("Error XMLHttp.");
}
}

Попробуй єту инициализацию.

Спустя 1 час, 50 минут, 19 секунд (21.02.2012 - 16:04) gidrosoldat написал(а):
inpost, ноуп. Все равно работать не хочет. Даже индикатор загрузки не появляется.
В Средствах разработчика IE говорит сие:
SCRIPT445: Команда не поддерживается объектом
test, строка 57 символ 1


57 строка это:
<input type="button" value="тыц" onClick="start()">


P.S. IE любит заблокировать локальные JS скрипты, но тут не тот случай, alert() окна вылетают на ура.



Спустя 54 минуты, 27 секунд (21.02.2012 - 16:58) inpost написал(а):
Всё пишется маленькими буквами:
onclick="start()"

Спустя 2 минуты, 12 секунд (21.02.2012 - 17:00) inpost написал(а):
<input type='text' id='myid'>
Свойства атрибутов пишутся в двойной кавычке, а не одинарной.

Спустя 3 минуты, 17 секунд (21.02.2012 - 17:04) inpost написал(а):
Допустим внутри функции ты пишешь:
statusElem.innerHTML = b;

Хотя что такое "statusElem" ?
Ни я, ни скрипт не знают.


Спустя 5 минут, 27 секунд (21.02.2012 - 17:09) killer8080 написал(а):
gidrosoldat
а activeX часом не отключены?
Цитата (inpost @ 21.02.2012 - 16:04)
Допустим внутри функции ты пишешь:
statusElem.innerHTML = b;

Хотя что такое "statusElem" ?
Ни я, ни скрипт не знают.

Скрипт знает
var statusElem = document.getElementById('status');

Спустя 9 минут, 42 секунды (21.02.2012 - 17:19) inpost написал(а):
gidrosoldat
Выстави тут ссылку, и я сам попробую воспользоваться Аяксом smile.gif Или постучи в профиль и проверишь рабочий аякс smile.gif

Спустя 27 минут, 13 секунд (21.02.2012 - 17:46) bodja написал(а):
Шутник однако,
Msxm12.XMLHTTP biggrin.gif biggrin.gif biggrin.gif
Ну ,чтож осталось подождать двеннадцатую версию laugh.gif

Спустя 3 часа, 2 минуты, 37 секунд (21.02.2012 - 20:49) Guest написал(а):
inpost, кавычки поправил, "onclick" написал маленькими буквами. Порядок, конечно, должен быть ))
bodja, молодцом, заметил. Но все равно не пашет.
killer8080, все может быть. Я IE не пользуюсь совсем - посмотрю. Хотя если на клик прицепить самую простую функцию с алертом, алерт появляется.

Спустя 1 минута, 7 секунд (21.02.2012 - 20:50) gidrosoldat написал(а):
Перед этим мой пост )
Включил в IE все что связано с ActiveX, все еще не работает.

Спустя 7 часов, 5 минут, 24 секунды (22.02.2012 - 03:55) inpost написал(а):
Skype: imbalance_hero
Свяжись со мной, проверим твой браузер сначало.

Спустя 16 часов, 16 минут, 45 секунд (22.02.2012 - 20:12) gidrosoldat написал(а):
inpost, не пришлось. Ударными темпами изучаю JQuery, собрал AJAX запрос на нем и все везде работает (в том числе и в IE)

Спустя 1 час, 1 минута, 48 секунд (22.02.2012 - 21:14) inpost написал(а):
gidrosoldat
Ну да, когда ручками сделать нормально не умеем, всегда ищем костыли smile.gif
А потом ещё обижаются, а почему нам "так мало платят?"... а чтобы платили, надо учиться, а не жить за счёт костылей.

Спустя 1 час, 6 минут, 42 секунды (22.02.2012 - 22:20) ApuktaChehov написал(а):
gidrosoldat - inpost прав. Я когда только начинал, думал, нафиг мне писать все самому, когда можно изучить JQuery быстренько и все буду типа уметь. Но первый же проект показал избыточность. Когда я только ради одного аякса грузил весь JQ. В один момент я понял это и стал учиться.

Так что мы все советуем вам учится.

Спустя 1 час, 56 минут, 8 секунд (23.02.2012 - 00:16) gidrosoldat написал(а):
inpost, ApuktaChehov, я не против учебы. Но следуя вашей логике, вообще от всех фреймворков откажемся. Ведь сколько там функций и классов не ненужных грузятся. Лучше велосипед самому собрать из минимум деталей! Под горку он из-за веса лучше поедет, но если что-то в нем поменять захотим придется самому детальку напильником выпиливать. Вместо того что бы просто какую нибудь гайку подкрутить.

Спустя 26 минут, 24 секунды (23.02.2012 - 00:43) killer8080 написал(а):
gidrosoldat
для работы с аяксом есть отличная либа Котерова JsHttpRequest
Цитата (gidrosoldat @ 22.02.2012 - 23:16)
но если что-то в нем поменять захотим придется самому детальку напильником выпиливать.

У меня это вызывает другую ассоциацию, когда тебе нужно пойти закрутить винт, тянешь за собой огромный ящик с инструментами, монтировками, кувалдой, только потому что в этом ящике есть отвертка. smile.gif

Спустя 4 часа, 56 минут, 5 секунд (23.02.2012 - 05:39) bodja написал(а):
gidrosoldat

Не тех вы бородатых дядек за нос водите ,вот инициализация аякса в исходниках квери wink.gif

Цитата
function createStandardXHR() {
try {
  return new window.XMLHttpRequest();
} catch( e ) {}
}

function createActiveXHR() {
try {
  return new window.ActiveXObject( "Microsoft.XMLHTTP" );
} catch( e ) {}
}

// Create the request object
// (This is still attached to ajaxSettings for backward compatibility)
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
/* Microsoft failed to properly
  * implement the XMLHttpRequest in IE7 (can't request local files),
  * so we use the ActiveXObject when it is available
  * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
  * we need a fallback.
  */
function() {
  return !this.isLocal && createStandardXHR() || createActiveXHR();
} :
// For all other browsers, use the standard XMLHttpRequest object
createStandardXHR;

Спустя 4 часа, 2 минуты, 16 секунд (23.02.2012 - 09:41) gidrosoldat написал(а):
killer8080, сайт, который сейчас собираю, и так использует jQuery (анимированное меню, переключение табов, информационный баннер в виде движущихся слайдов).
Я думаю, в этом случае вполне оправданно и дальше использовать загруженную и востребованную библиотеку.
В другом конкретном случае (если нужен только AJAX и НИЧЕГО больше) вы будете правы.

bodja, что вы хотели этим кодом показать? Я не совсем понял.

Спустя 1 час, 44 минуты, 9 секунд (23.02.2012 - 11:25) inpost написал(а):
gidrosoldat
Реализация на JS Ajax:
минимум 7 строк, остальное - настройки.

Реализация на jQuery Ajax:
минимум 5 строк + возможные настройки.

Откуда взялись 2 строчки? Кодировка автоматом выставляется внутри библиотеки(!!!) и нужный объект автоматом инициализируется, объект, который я выше дал, а инициализируется простой строчкой: var = getXmlHttp;

Ради этих лживых двух строк - "мы изобретаем велосипед"? Как раз в данном случае jQuery изобрёл велосипед, а точнее переписал стандартные действия на свои, ничем не выиграл.

Вот пример:
function getElementById(id) {
return document.getElementById(id);
}

Спустя 2 часа, 32 минуты, 45 секунд (23.02.2012 - 13:58) gidrosoldat написал(а):
inpost, да я не против разобраться!
Вот собрал все в одном файле, можете даже у себя попробовать :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>
AJAX</title>
<style>

.border {
border: 4px solid #b8b8b8;
padding: 10px 15px;
margin: 15px;
}
</style>
<script
language="javascript">
function
getXmlHttp() {
var xmlhttp;

try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}


if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}

return xmlhttp;
}

function start() {
var req = getXmlHttp();

var statusElem = document.getElementById('status');
statusElem.innerHTML = 'please wait ...';

var text = document.getElementById('text').value;
query = 'text=' + encodeURIComponent(text);


req.onreadystatechange = function () {

if (req.readyState == 4) {
var response = req.responseText;
statusElem.innerHTML = response;
}
}


req.open('POST', 'http://www.electricpeople.net/ajax.php', true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);

}

function test() {
alert('test');
}
</script>
</head>
<body>
<div
class="border">
<div
id="status"></div>
<input
type="text" id="text"><br>
<input
type="button" value="тыц" onсlick="start()">
</div>
</body>
</html>


ajax.php на сервере:
<?php

$text = isset($_POST['text']) ? $_POST['text'] : 'no data';
sleep(1);
echo htmlspecialchars($text);

P.S. Пока собирал все в один файл, AJAX совсем перестал работать.
P.S.S. req.responseText пустой приходит.

Спустя 1 час, 41 минута, 54 секунды (23.02.2012 - 15:40) inpost написал(а):
Это не то, что я давал...

Спустя 6 часов, 14 минут, 41 секунда (23.02.2012 - 21:55) bodja написал(а):
Цитата
bodja, что вы хотели этим кодом показать? Я не совсем понял.


Хотел показать что кверивская инициализация ничем не отличается от вашего же примера.
Поэтому говорить там работает - здеся нет .Нет никакого смысла.

ЗЫ насчет примера я тут под носом выкладывал свою функцию,вместе с рекомендациями,почему и что может не работать.
http://phpforum.ru/index.php?showtopic=57758
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.