Привет всем знающим!!! подскажите на простом примере как использовать встроеный в джумлу ajax? я собираюсь написать компонент(по работе надо) работы с базой данных, надо реализовать ввод данных в таблицу без нажатия кнопок, тоесть то что пользователь написал в ячейку на форме должно упасть в базу после того как перейдешь на другую ячейку без всяких кнопок!!!
Код (html): <input type="text" id="myID" value=""> Код (CODE): $('myID').addEvent('blur', function(){ var myRequest = new Request( { url: 'getData.php', method: 'get', onSuccess: function(responseText, responseXML) { alert(responseText); } }); }); т.е. описываем событие и на это событие вешаем нужную вам функцию ) З,Ы,: писал на коленке, так что могут быть ошибки А вообще все доки по мутулсу можно найти ТУТ
$('myID').addEvent('blur'... Лучче не 'blur' а 'change', зачем нам перезаписывать базу тем-же самым если фокус просто случайно попадет на инпут и пропадет?
getdata.php - это скрипт который будет записывать в твою базу нужные данные. его, соответственно нужно написать , ну как обычный скрипт, только желательно в начале добавить в него нужные хидеры: Код (PHP): <?php header("Content-type: text/html; charset=utf-8"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); дальше настройка соединения с БД, нужные запросы на сохранение/обновление; вывод результата запроса: успешно/не удалось сохранить ?> С MooTools не разбирался, приведу пример на jQuery, будет повод поразмышлять заодно : есть твоя форма Код (html): <div id='ajax_result' style='display:none'></div> <input class='inputbox ajax_store' name='value1' type='text' /><br /> <textarea class='textbox ajax_store' name='value2'> </textarea> и т.д. пишешь скрипт после этой формы (пример на jQuery, в MooTools будет похоже), ajax_store - произвольное имя класса - селектор нужных элементов Код (CODE): <script language='javascript' type='text/javascript'> $(".ajax_store").bind("change",function(){ $("div#ajax_result").html("").hide(); $("div#ajax_result").load("getdata.php?value="+($(this).val() || $(this).html())+"¶m_name="+$(this).attr("name"),function(){ $("div#ajax_result").show(); }); }); </script> Т.е. тем самым ты должен передать значение и имя параметра скрипту php и вернуть результат сохранения на страницу. Все по-моему просто. И не забудь что разные браузеры по разному передают get запрос (разная кодировка), по-этому возможно в getdata.php потребуется хорошая функция iconv
paranoik, если ты повещаешь на CHANGE то запись будет производиться после ввода каждого символа, на пустые поля и левые символы можно поставить фильтры, так что лучше использовать BLUR. zhest, подробные пример напишу завтра вечером т.к. пиво, которое было выпито за вечер, не позволяет мне сейчас думать )
НЕТ. Change срабатывает лишь после ухода с поля. Ну у меня то все работает как надо, чо спорить то. А блур - это и в африке блур. Не предназначен он для этого. Отделяйте мух от котлет.
У меня от тоже вопросик по Ajax с использованием Jquery - задача такая на странице будет несколько ссылок и при клике на каждой нужно чтоб в функцию передавался параметр id который передается в запросе скрипту, а он на основе этого id делает выборку из БД. Тоесть непонятно как мне передать от ссылки в функцию значение, событие то я присвоил к сылке через ее id но не писать же мне одну и туже функцию с разными id в запросе, десять раз под 10 ссылок !!! Подскажите как быть? Вот вариант когда id жестко прописан в параметр функции - Ajax: Код (html): <html> <head> <meta http-equiv="" content="text/html; charset=iso-8859-1" /> <title>fgfghfg</title> <meta http-equiv="" content="text/html; charset=iso-8859-1" /> <script type="text/javascript" src="jquery-1.3.2.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#makeRequest").click(function(){ $.get("script.php", { id: "1" }, function(arr_art){ document.getElementById('preview').innerHTML = ''+ arr_art; }); }); }); </script> </head> <body> <div id="preview"></div> <a href="#" id="makeRequest"> Clik me </a> </body> </html>
<a href="index.php?myparam=gg&id=1" name="myName">Link</a> т.е. Вы в ссылке передаете нужные Вам параметры, обрабатываете событие нажатия на ссылку и на сервере получаете параметры ) Код (CODE): $(document).ready(function(){ $("a").click(function() { if($(this).attr("name") == "myName") $.ajax ({ type: "POST", url: $(this).attr("href"), cache: false, success: function(msg) { $("#preview").html(msg); } }); return false; }); });
нафига так длинно. Есть же простой метод load... Вот тоже самое, только короче: Код (CODE): $(document).ready(function(){ $("a[name='myName']").click(function() { $("#preview").load($(this).attr("href")); return false; }); }); Вот и всё
А как этот файл вписать в саму джумлу, а точнее в модуль? Есть статичный работающий php файл. Но вот в модуль вписать его не получается (к базе подключается при первом вызове, а когда идет вызов самого себя через аякс, не работает). У меня 3 селекта (1 берется из базы сразу, 2 и 3 через аякс). На статическом файле работает, при вставке в модуль - только 1 селект выводит. Конкретнее тут (чтоб не дублировать) http://joomlaforum.ru/index.php/topic,81645.0.html
Да положи его куда хош!!! Хоть в корень (правильней - в папку с модулем). Только не забываем про безопасность - проверяем $_SERVER['HTTP_REFERER'] и т.д.
Почему же нет? Передадим гетом referrer= "" и сравним потом с $_SERVER['HTTP_REFERER'] получим ТРУ Только это не единственная и далеко не главная мера по безопасности должна быть. Надеюсь, знаете какие
до Вас пытаются донести, что в некоторых браузерах можно отключить использование этого параметра ))) как тогда быть ? )
-> dlya teh, kto v tanke: otkluchennii v brausere referrer ne pomeshaet zaprosit $_SERVER['HTTP_REFERER'], on budet == "" + pri otkluchennom mi postavim &referrer = "" t.e. dlya nas glavnoe, chtobi ($_SERVER['HTTP_REFERER'] || "") == ($_GET['referrer'] || ""). elementarnii i neosnovnoi moment,... ne dumal chto voprosi vozniknut... teper ponyatno???
Да вот только вчера систему переставил... Windows 7 RC 7100, а языковой пакет скачать еще не успел. Поэтому так и написалось