Просмотр полной версии : Тут ajax кто-нибудь хоть немного знает?
Есть раздел mp3 ремиксов (http://zxtunes.com/remix_mp3.php) начал делать страничку для закачки музонов. Очень хочется сделать загрузку новых музонов за 1 обновление странички.
Для этого нужно, что бы когда человек выбирает из списка автора оригинального AY трека, javascript автоматом запрашивал из базы список музонов этого автора и подставлял их в форму.
Нужен именно ajax код для этого (с php тредностей нет).
Кто-нибудь сталкивался с решением подобной задачки? :v2_conf2:
Shadow Maker
12.01.2009, 22:53
Даже не немного... Яваскрипт запрашивал из БАЗЫ МУСКУЛЯ? oO newart, ты прекращай курить так много травы... Аякс может только данные из выполненного php-скрипта получить. Делается примерно так:
var query = "?mp3=" + mp3 + "&bitrate=" + btr;
ajaxRequest.open("GET", "скриптдлябазы.php" + query, true);
ajaxRequest.send(null);
Далее делаешь чего хочешь с этим реквестом.
В принципе вот готовый уже вариант: http://andreas.id.au/jsrs/
Бери да перетаскивай себе с минимальными модификациями.
Яваскрипт запрашивал из БАЗЫ МУСКУЛЯ? oO newart, ты прекращай курить так много травы... Аякс может только данные из выполненного php-скрипта получить
Обобщенно выразился. Зачем к словам цеплятся?
var query = "?mp3=" + mp3 + "&bitrate=" + btr;
ajaxRequest.open("GET", "скриптдлябазы.php" + query, true);
ajaxRequest.send(null);
Непонятно как передать значение из формы (ID автора оригинала) яваскрипту и далее в php. И самое главное не понятно как данные из "скриптдлябазы.php" впихнуть в форму (выпадающий список).
Покури jQuery (http://jquery.com/), очень рекомендую. Там все просто.
<script src="/scripts/jquery/jquery.js" type="text/javascript"></script>
<script type="text/javascript">/*<![CDATA[*/
$(document).ready(function(){
$("#submit_form").click(function(){
$.ajax({
'success': function(data) {
$("#result").html("data");
},
'url': 'скриптдлябазы.php',
'data': $("#form").serialize(),
'type': 'POST',
'cache':false
});
});
});
/*]]>*/</script>
<form id="authors_form">
... здесь список данных, которые отправляются в скриптдлябазы.php
через POST-запрос ...
</form>
<div id="submit_form">Отправить данные</div>
<div id="result">Вместо этого текста будет подставлено всё,
что нарисует скриптдлябазы.php</div>
Я не проверял, мог и накосячить. Но принцип такой.
Можно даже проще, через $.post() например.
Непонятно как передать значение из формы (ID автора оригинала) яваскрипту и далее в php. И самое главное не понятно как данные из "скриптдлябазы.php" впихнуть в форму (выпадающий список).
Такс, как я понимаю, странички у тебя генерирует РНР, значит получаеш список авторов оригиналов, т.е. их ID и подставляеш их в select:
<select id="orig_authors" onchange="updateRemixesList();"><?php
foreach ( $authors as $author ) { ?>
<option value="<?php echo $author['id']; ?>"><?php echo $author['name']; ?></option>
<?php } ?></select>Далее когда пользователь выберет автора оригинала обработчик onChange вызовет JavaScript функцию updateRemixesList();
function updateRemixesList() {
var orig_authors_select = document.getElemntById('orig_authors'); //получаем объект selecta
if ( orig_authors_select ) {
orig_author_id = orig_authors_select.options[orig_authors_select.selected_index].value;//Получаем текущее выбраное значение
//Далее делаем запрос аяксом, т.е. отправляем orig_author_id
} else alert('It is a bad day today...');
}Теперь server side получил Id автора оригинала и мы можем получить список ремиксов. Получаем список ремиксов (или авторов ремиксов, уже забыл пока писал :( ), формируем XML или текст для ответа (ответ приходит обратно в JavaScript)
Будем считать что ответ от аякса мы удачно получили и у нас есть некий массив с авторами ремиксов и этот список нужно вывести во второй выпадающий список, делаем следующее:
в том месте где должен быть выпадающий список ставим:
<select id="remix_authors"></select>
Далее допустим что авторов ремиксов добавляет функция addRemixAuthors()
function addRemixAuthors() {
var remix_authors_select = document.getElementById('remix_authors');
if (remix_authors_select) {
//Удаляем старый список
if ( remix_authors_select.options.length > 0 ) {
for (i=0;i<remix_authors_select.options.length;i++) {
remix_authors_select.removeChild(remix_authors_sel ect.options[i]);
}
}
//Добавляем новые элементы
for (i=0;i<authors.length;i++) {
var el = elem('option', {'value', authors[i][1]/*id*/}, null, authors[i][0]/*name*/);
remix_authors_select.appendChild( el );
}
}
}Ну и последняя функция:
function elem(name, attrs, style, text, evthandlers) {
var e = document.createElement(name);
if (attrs) {
for (key in attrs) {
if (key == 'class') {
e.className = attrs[key];
} else if (key == 'id') {
e.id = attrs[key];
} else {
e.setAttribute(key, attrs[key]);
}
}
}
if (style) {
for (key in style) {
e.style[key] = style[key];
}
}
if (text) {
e.appendChild(document.createTextNode(text));
}
if (evthandlers) {
for (key in evthandlers) {
//alert(evthandlers[key]);
//alert(key);
if(window.addEventListener) { // Mozilla, Netscape, Firefox
e.addEventListener(key, evthandlers[key], false);
} else { // IE
e.attachEvent('on'+key, evthandlers[key]);
}
}
}
return e;
}
Shadow Maker
13.01.2009, 00:06
/*Поудалял, нафига еще третий способ*/
Короче скачай пример вон я тебе ссылку дал, там уже готовое всё, тебе тока пхп на базу переделать.
Keeper, динозавр у тебя мощный :) newart'у проще будет в php формы сразу нагенерить, он же яваскрипт не понимает.
я бы тоже смотрел в сторону jQuery. подозреваю что есть уже готовые решения которые возможно надо подкрутить чуть-чуть...
например:
http://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax/
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot