Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменить скрипт с помощью ajax, Нужен совет 
V
    Опции темы
tikitiki
Дата 8.1.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Ajax начинаю только использовать на практике. Я решил применить ajax для вывода каталога магазина и подобных вещей. Этим уже занимается работающий пхп скрипт. У меня при выводе ссылок каталога каждый раз при кликах по ссылкам страница обновляется. Для того, чтоб не обновлялась и решил ajax применить. Библиотеки не использую. Пришла вроде не плохая мысль. Решил посоветоваться-можно ли так.
1) В общем я решил весь скрипт (о котором выше говорил) использовать в качестве url для запроса серверу. Формирование запроса и объекта запроса я решил повесить на onclick к ссылкам в каталоге. А сам скрипт всё-равно использовать ещё и в обычном своём смысле. 
2) При этом скрипт у меня где-то до середины выводит то, что я хотел менять, а дальше тоже выводит html и smarty и из бд данные, но эту часть мне не хочется и не надо менять. Вот эту часть я понял, что можно просто целиком получить в ответе сервера на запрос (запрос ajax) и выдать через print в пхп. 
3) Ту часть, что я менять хотел -можно тоже исправить и использовать при этом вывод в пхп ответа сервера. Но с помощью dom я хочу сначала div с ссылками каталога очистить от всех потомков, а потом добавить ответ сервера, в котором будут упорядоченные ссылки в качестве текстового узла этого div.
Вот так. Я сейчас подумал-моё решение вроде реально может работать. Ещё раз. В итоге я получаю скрипт пхп свой, у которого до середины выводятся ссылки из каталога (ссылки с товарами), на которые я на onclick повесил запрос к серверу. В url запроса значится скрипт тот же. После этого получу в ответе сервера обновлённые ссылки, которые с помощью dom ставлю в div. Если же ссылка на странице скипта не входит в число ссылок, которые формируют запрос, то произойдёт обычная работа скрипта при клике по ссылке. А за обработку этого клика будет отвечать весь скрипт с начала и до конца(может не весь из-за условий в скрипте), как и было до этого.
Мне здесь в первую очередь важна идея, а код уже потом.
Понял, что без кода плохо. Вот часть кода из head на js:
Код

function addOnClickHandlers(){
    var ajaxDiv=document.getElementById("ajax"); 
    var ahrefs=ajaxDiv.getElementsByTagName("a"); 
        for (var i=0;i<=ahrefs.length;i++){
            ahrefs[i].onclick=clickAhrefs;
        }
}
function clickAhrefs(){
        
    var aHref=this; 
    var ajaxDivDva=document.getElementById("ajax"); 
        ajaxDivDva.appendChild(aHref);
    return false; 
}

В этом коде первая функция вешает обработчики на ссылки каталога. Вторая функция при клике должна удалять потомков из див и добавлять новые ссылки в качестве новых потомков. Я только удаление потомков не успел здесь написать. Понял, что в коде ошибся. В функции clickAhrefs надо как раз организовать создание объекта запроса и самого запроса. А то, что я написал в коде-надо использовать в функции отдельной, чтоб она ответ сервера обрабатывала и она должна вызываться на onreadystatechange.
 


--------------------
PM   Вверх
tikitiki
Дата 8.1.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Извиняюсь, ещё ошибся. В последней функции (что в коде) надо не саму ссылку добавлять в div, а ссылки, возвращённые в ответе сервера. Вопрос большой-потому и ошибки. Ответьте хотя бы -похожие решения используют на практике, или какие решения взамен можно использовать? Меня бы и такой ответ устроил, т.е. я не прошу за меня ничего делать. 



--------------------
PM   Вверх
tikitiki
Дата 8.1.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Отпишусь. Всё, что писал-всё сделал в качестве теста. Но скрипт работает по-старому, т.е. страница обновляется. Что странно. Запрос серверу видимо отправляется, т.к. иначе должен сообщение выдать об ошибке(я включил в код). У меня подозрение большое на 
Код

return false;

Я его в функции использую для того, чтоб ссылки при кликах не вызывали обновление страницы.
А функцию эту вешаю в обработчиках onclick. Может этот код в другое место поставить? Может   вот в этом коде можно после onclick добавить? Я не знаю-здесь уместно и функцию и ретурн использовать одновременно?  
Код

for (var i=0;i<=ahrefs.length;i++){
            ahrefs[i].onclick=clickAhrefs;
        }



--------------------
PM   Вверх
tikitiki
Дата 9.1.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Немного полегчало. Видимо правильно всё делаю. С return false сделал как ниже в коде наугад. Но из-за этого ошибки в консоли js в firefox исчезли, как ни странно. Не знаю можно ли так делать. Запрос к серверу скорее всего правильно формируется, т.к. к примеру нижний код вызывает при клике на ссылке сообщение "Request created". Меня сейчас только одно смущает, что сообщения такие не все ссылки нужные вызывают, на которые вешаю обработчики с помощью функции из данного кода. Знающие-помогите.  
Код

var request=null;
function addOnClickHandlers(){
    var ajaxDiv=document.getElementById("ajax"); 
    var ahrefs=ajaxDiv.getElementsByTagName("a"); 
        for (var i=0;i<=ahrefs.length;i++){ldelim}
            ahrefs[i].onclick=function clickAhrefs(){
                        var aHref=this; 
            var url=aHref+"&p=1";
                    createRequest();
            if(request==null){alert("Request not created");}
            else alert("Request created");
                    request.open("GET", url, true);
                        request.onreadystatechange=updatepage;
                    request.send(null);
                    
    
    
                        };
            return false; 

        }
}

Ещё странность есть. Местами, где не ожидал-выскакивает ошибка. Опять же при кликах на ссылках. При чём мне довольно не понятно, что это за ошибка. Описание ошибки одно, а ссылается на другое. Ссылается на код ниже.
Код

if(request.status == 200){

А описание из консоли js firefox:
Код

Ошибка: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: http://лалалала.ru/?ID=14&PID=0&name=%CA%EE%F0%E5%ED%FC&ref=root&name_sub=%D2%EE%E2%E0%F0%FB%20%E4%EB%FF%20%E4%E5%EB%EE%E2%FB%F5%20%EB%FE%E4%E5%E9&ref_sub=&page=1&count=16 :: updatepage :: line 54"  data: no]
Источник: http://лалалала.ru/?ID=14&PID=0&name=%CA%EE%F0%E5%ED%FC&ref=root&name_sub=%D2%EE%E2%E0%F0%FB%20%E4%EB%FF%20%E4%E5%EB%EE%E2%FB%F5%20%EB%FE%E4%E5%E9&ref_sub=&page=1&count=16
Строка: 54



--------------------
PM   Вверх
12345c
Дата 15.1.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Цитата

if(request.status == 200){
Потому что надо выполнять по 
Код

if(request.readyState == 4 && request.status == 200){



--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
tikitiki
Дата 15.1.2009, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



12345c, readyState == 4 у меня тоже есть в коде. Здесь просто не указал. Но у меня два отдельных условия. 


--------------------
PM   Вверх
tikitiki
Дата 27.1.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Почти всё у меня получилось. Снимаю вопрос.


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.