[РЕШЕНО] AHAH без создания модуля

Главные вкладки

Аватар пользователя Ryo Hazuki Ryo Hazuki 12 мая 2010 в 17:21

Необходимо сделать зависимые списки типа Регион -> Город. Сделал их аяксом, но друпал не понимает данные, которые я подгрузил. Возможно использовать AHAH для списков, не создавая свой модуль?

Комментарии

Аватар пользователя sadmin sadmin 13 мая 2010 в 1:11

"Ryo Hazuki" wrote:
Сделал их аяксом, но друпал не понимает данные, которые я подгрузил.

в чем именно загвоздка?

Аватар пользователя kyky kyky 13 мая 2010 в 2:43

AHAH можно реализовать и без модуля.
Ahah-запрос может обращаться к стороннему php-скрипту, главное, чтобы он возвращал правильный ответ.
Должен быть JSON вида {"data": "ваш контент"} и заголовок Content-Type: "text/javascript".

Аватар пользователя xxandeadxx xxandeadxx 13 мая 2010 в 4:28

"kyky" wrote:
главное, чтобы он возвращал правильный ответ.
Должен быть JSON вида {"data": "ваш контент"} и заголовок Content-Type: "text/javascript".

тогда технически это уже не AHAH Wink При AHAH запросе должен возвращаться html — Asynchronous HTML and HTTP

Аватар пользователя Ryo Hazuki Ryo Hazuki 13 мая 2010 в 11:16

А может быть можно как-нибудь через аякс все-таки сделать?? он мне как-то роднее, а в ahah никак вкурить не могу... Выложу свой код, может кто че подскажет?
Файл reg_form.js:

$(document).ready(
        function()
        {
                $("#edit-profile-region").empty();
                $("#edit-profile-city").empty();
                $.ajax(
                        {
                                url:"/sites/all/themes/pshoptheme/scripts/regions.php",
                                type:"POST",
                                dataType:'json',
                                success:function(data)
                                {
                                        var i = 0;
                                        while(data[i])
                                        {
                                                $("#edit-profile-region").append('<option>'+data[i]+'</option>');
                                                i++;
                                        }
                                        $.ajax(
                                        {
                                                url:"/sites/all/themes/pshoptheme/scripts/citys.php",
                                                type:"POST",
                                                dataType:'json',
                                                data:
                                                {
                                                        reg:$("#edit-profile-region").val()
                                                },
                                                success:function(data)
                                                {
                                                        var i = 0;
                                                        while(data[i])
                                                        {
                                                                $("#edit-profile-city").append('<option>'+data[i]+'</option>');
                                                                i++;
                                                        }
                                                }
                                        });
                                }
                        });
                $("#edit-profile-region").change(
                        function()
                        {
                                $.ajax(
                                {
                                        url:"/sites/all/themes/pshoptheme/scripts/citys.php",
                                        type:"POST",
                                        dataType:'json',
                                        data:
                                        {
                                                reg:$("#edit-profile-region").val()
                                        },
                                        success:function(data)
                                                        {
                                                                $("#edit-profile-city").empty();
                                                                var i = 0;
                                                                while(data[i])
                                                                {
                                                                        $("#edit-profile-city").append('<option value="'+i+'">'+data[i]+'</option>');
                                                                        i++;
                                                                }
                                                        }
                                });
                        });
        });

В файлах regions.php и citys.php происходит запрос к БД и возвращаются регионы и города в формате json.
Все отлично подгружается, селекты заполняются, даже работает зависимость Регион -> Город, т.е. аякс прекрасно работает,НО Drupal не видит эти подгруженные данные. Когда я вызываю сабмит формы, то выскакивает сообщение An illegal choice has been detected. Please contact the site administrator.

Аватар пользователя penexe penexe 13 мая 2010 в 11:36

представь ты пополняешь счет через форму, там есть селект 10, 20, 100. но ты через фаербаг сабмитишь 10000000.
тебе надо каждый сабмит класть новые значения в кеш формы и тд. курим

Аватар пользователя Ryo Hazuki Ryo Hazuki 13 мая 2010 в 22:49

Все, создал свой модуль, разобрался с AHAH. Не так уж сложно оказалось) Всем спасибо за помощь!)
penexe, отдельное спасибо за статью, очень помогла!)