Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Проблемы с мультибраузерностью (AJAX)


Автор: Yonick 12.4.2007, 22:07
Решил познакомится с Ajax, а именно с JsHttpRequest. Решил сделать поаккуратнее, написал и выделил в отдельный файл кусок кода: 

Код

var httpRequest = new JsHttpRequest();
var resultId = '';

//function which sends request
function sendRequest(file, _resultId, getRequestProc) {  //(adress,id of html element,answer hendler)
        resultId = _resultId;
        document.getElementById(resultId).innerHTML = '<center>Подождите, идет загрузка...</center>';
        httpRequest.open(null, file, true);
        httpRequest.onreadystatechange = getRequestProc;
        httpRequest.send(null);
}
//hendler
function getRequest() {
        if (httpRequest.readyState == 4) {
            document.getElementById(resultId).innerHTML = httpRequest.responseText;
        }
}


Включаю этот файлик в фронтенд и отправляю запрос:    

Код

<a href="#" onClick="javascript:sendRequest('subjects.php', 'subjects_res', getRequest);">Subjects</a>


На стороне сервера все выглядит примерно так:

Код

require_once "data/JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");
$subjects=array('Item_1','Item_2','Item_3');
foreach($subjects as $subj){
        echo '<li><a href="#"  onClick="javascript:sendRequest(\'content.php\', \'result\', getRequest);">'.$subj.'</a></li>';
}


И вот все это дело работает только в мозилле! (Проверял в MyIE, Opera и Mozilla). 
Если кто знает в чем проблема, буду очень признателен! 
Заранее спасибо!

Автор: Sardar 13.4.2007, 19:25
Выкладывай ссылку на страницу. В примере всё в порядке.

Автор: smartov 13.4.2007, 21:24
Yonick, заодно со страничкой хотелось бы узнать почему вы выбрали JsHttpRequest, а не XmlHttpRequest собственно

Автор: SelenIT 13.4.2007, 22:29
Цитата(smartov @  13.4.2007,  21:24 Найти цитируемый пост)
почему вы выбрали JsHttpRequest, а не XmlHttpRequest собственно

smartov, так ведь http://dklab.ru/lib/JsHttpRequest/, насколько мне известно, использует внутри себя XmlHttpRequest везде, где можно, и только в экстренных случаях типа вымерших 7-х Опер переключается на эксклюзивный котеровский подход с динамическим тегом <script>... или я не про ту JsHttpRequest подумал?

Автор: smartov 13.4.2007, 22:38
SelenIT, ну как бы JsHttpRequest (как XmlHttpRequest), насколько я знаю, это подход, а не либа. Именно завязанный на динамическом <script>.
Или у меня неверная инфа?

Автор: SelenIT 13.4.2007, 22:46
Из моих наблюдений за эволюцией этой штуки (напр. http://forum.dklab.ru/js/jshttprequest/41_jshttprequestDinamicheskayaPodkachkaDannihBezPerezagruzkiStranitsiChast1.html, и на XPoint'е что-то было, но сейчас не могу найти) сначала это действительно был самостоятельный подход, который Котеров сам придумал и воплотил в одноименной либе. Но начиная со второй версии либы она автоматом выбирает между стандартным и нестандартным подходами - ради эффективности, совместимости с Safari и т.п. Причем эти нюансы инкапсулированы внутри, а снаружи работа либы выглядит (по крайней мере, теоретически) везде единообразно...

Автор: Alx 13.4.2007, 22:57
знаете, может звучит глупо.. но:
я с другими библиотеками не работал, но эта самая лучшая.
вот честно.. никаких недостатков..

Автор: Sardar 13.4.2007, 23:27
Цитата(SelenIT @  13.4.2007,  21:46 Найти цитируемый пост)
который Котеров сам придумал и воплотил в одноименной либе

На самом деле динамическую подзагрузку скриптов ещё с ИЕ5.5 использовать начали, метод не новый. Но либа действительно выполнена качественно, постепенно вобрала в себя самое лучшее и сейчас использует XMLHttpRequest везде, где это возможно.

Автор: SelenIT 14.4.2007, 14:07
Цитата(Sardar @  13.4.2007,  23:27 Найти цитируемый пост)
динамическую подзагрузку скриптов ещё с ИЕ5.5 использовать начали, метод не новый

Может быть. Но помню, что в обсуждении тогда ещё только идеи котеровской либы на XPoint'е никто так и не смог найти ни одной ссылки на более ранние прецеденты реализации такого подхода, несмотря на прямую просьбу автора. Кстати, для общей эрудиции буду весьма благодарен за таковые! smile

Автор: Yonick 15.4.2007, 20:00
Sardar, дело в том что все только на стадии разработки поэтому нечего выкладывать. По идее все должно работать, поскольку JsHttpRequest и разрабатывался чтобы упростить жизнь разработчикам, но не тут-то было не фурычет зараза smile .

smartov, насколько я понимаю JsHttpRequest более универсален. Используя XMLHttpRequest я столкнулся с проблемами кодировки при возврате результата запроса с сервера, это и послужило первой причиной поиска более оптимальных решений! Но пока не очень плодотворно:(

Автор: Alx 15.4.2007, 23:52
JsHttpRequest это ajax-библиотека, использующая различные методы реализации подгрузки данных, в т.ч. XMLHttpRequest, с сервера, для разных браузеров и т.п. + многие другие полезные функции.

XMLHttpRequest - это одна из возможных технологий подгрузки данных.

Автор: Yonick 21.4.2007, 18:30
Проблема с отображением решена! Все дело в том что не нужно  было выводить результат в бэкенде через echo.
Нужно присваивать все переменной $_RESULT а обрабатывать через responseJS!

Но тут возникает новый вопрос:  Как обрабатвать responseJS? Я передаю $_RESULT массив строк "subj". 
$_RESULT   = array ("subjects" => $subj);

Как мне обрабатывать httpRequest.responseJS.subjects чтобы вывести на экран все элементы массива?

Автор: Alx 21.4.2007, 19:46
Цитата(Yonick @  21.4.2007,  18:30 Найти цитируемый пост)
Все дело в том что не нужно  было выводить результат в бэкенде через echo.
Нужно присваивать все переменной $_RESULT а обрабатывать через responseJS!

эврика!

Цитата(Yonick @  21.4.2007,  18:30 Найти цитируемый пост)
Но тут возникает новый вопрос:  Как обрабатвать responseJS? Я передаю $_RESULT массив строк "subj". 
$_RESULT   = array ("subjects" => $subj);

Как мне обрабатывать httpRequest.responseJS.subjects чтобы вывести на экран все элементы массива?

какие все элементы? если $subj это строка, то из скрипта - responseJS.subjects. если массив -  responseJS.subjects[n]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)