Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите плизз как можно упростить код (https://javascript.ru/forum/misc/8596-podskazhite-plizz-kak-mozhno-uprostit-kod.html)

frolvict 03.04.2010 23:43

Подскажите плизз как можно упростить код
 
У меня имееться вот такой вот код

$.ajax({
			url:"save.php",
			data:"save01="+$("#select010").val()
			+"&save02="+$("#select020").val()
                        +"&save03="+$("#select030").val()
                        +"&save04="+$("#select040").val()
                        +"&save05="+$("#select050").val()
                        +"&save06="+$("#select060").val()
                        +"&save07="+$("#select070").val()
                        +"&save08="+$("#select080").val()
                        +"&save09="+$("#select090").val()
                        +"&save10="+$("#select100").val()
                        +"&save11="+$("#select110").val()
			+"&save12="+$("#select120").val(),
			success: function(save){
				$(".save01").append(save);
			}


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

Aetae 04.04.2010 05:26

Очевидно цикл. Но хен знает эти ваши фреймворки.)

frolvict 04.04.2010 08:01

А может еще у кого будут какие-нибудь предложения?

SkyLight 04.04.2010 13:01

А чем не нравится цикл? Он превратит 12 строк из вашего кода в 2. Упрощение уже очевидно.

frolvict 04.04.2010 13:47

А в цикле может $.ajax передавать данные в пхп скрипт?
если да, то подскажите плизз как

SkyLight 04.04.2010 13:58

Вы все неправильно поняли. Надо не запросы в цикле делать, а всего лишь передать в запрос параметры. Запрос так и будет один.

frolvict 04.04.2010 14:04

В двух словах
У меня на странице много селекторного меню ( раскрывающиеся списки) так вот мне нужно чтоб при нажатии на кнопку в пхп передавались все выбранные данные из этих списков и тогда уже пхп их обрабатывает. Пока реализовал это с помощью кода такого

$.ajax({
            url:"save.php",
            data:"save01="+$("#select010").val()
            +"&save02="+$("#select020").val()
                        +"&save03="+$("#select030").val()
                        +"&save04="+$("#select040").val()
                        +"&save05="+$("#select050").val()
                        +"&save06="+$("#select060").val()
                        +"&save07="+$("#select070").val()
                        +"&save08="+$("#select080").val()
                        +"&save09="+$("#select090").val()
                        +"&save10="+$("#select100").val()
                        +"&save11="+$("#select110").val()
            +"&save12="+$("#select120").val(),
            success: function(save){
                $(".save01").append(save);
            }


но я уверен что это же можно упростить как-то, так как дальше будет еще хуже, будет до 20 селекторных меню и больше

SkyLight 04.04.2010 14:22

Ну вам же сказали - цикл. Выбирайте все нужные селекты, пройдитесь по ним циклом (тем же each, например) и соберите их значения. Какие проблемы-то?

frolvict 04.04.2010 14:26

Собрать то нету проблем, а как потом передать эти все данные в пхп скрипт? и не просто спрокой через запятую, а именно чтоб имена были у этих значений, чтоб пхп скрипт потом мог их обработать правильно

SkyLight 04.04.2010 14:41

Сейчас вы передаете строку. Теперь вам надо собрать ту же строку, только циклом. Что в этом сложного?

frolvict 04.04.2010 14:52

Вот теперь вроде бы понял ;)
Спасибо за помощь!

subzey 05.04.2010 13:00

По-идее, как-то так…
var dataArray = [];
$("[id^=#select]").each(function(){ // для каждого элемента, чей id начинается с "select"
	var match = /^select(\d+)0$/.test(this.id); // соответствует маске?
	if (!match) return true; // нет — игнорируем
	dataArray.push("save" + match[1] + "=" + $(this).val()); // используя выдранное значение, добавляем значение в массив
})

$.ajax({ 
	url:"save.php", 
	data: dataArray.join("&"), // соединяем куски массива так, что их разделяет "&"
	success: function(save){ 
		$(".save01").append(save); 
}


Должно работать, если я не опечатался, для всех элементов с id = "select{любое положительное количество цифр}0"

frolvict 05.04.2010 13:05

Вот это вообще суперское решение!!!
Большое человеческое СПАСИБИЩЕ!!! ))

пойду пробовать реализовывать это в жизнь ;)

frolvict 07.04.2010 13:55

Не могли бы вы плизз пояснить что тут происходит

03	    var match = /^select(\d+)0$/.test(this.id); // соответствует маске?
04	    if (!match) return true; // нет — игнорируем


Не совсем понял как маска тут формируется
/^select(\d+)0$/.test(this.id);
И для чего потом проверку запускать?

neurostep 07.04.2010 15:59

$("[id^=#select]")


массив всех элементов у которых id начинается с select

var  match = /^select(\d+)0$/.test(this.id);


Проверка, подходит ли id под "маску". "маска" = регулярное выражение. Говорит в данном случае о том, что строка должна начинаться с select, за тем следовать одно или более чисел от 0 до 9 (\d+), затем следует 0. $ - конец строки.
Проверка собственно нужна затем, чтобы отсеить ненужные элементы.

B~Vladi 07.04.2010 17:14

Может заюзать старый добрый POST?:-?

А пых пусь сам отсеит лишнее...

frolvict 07.04.2010 18:23

Всем большое спасибо за ответы!!!

А как потом используя этот вариант получить в пхп все данне передаваемые?

var dataArray = [];
$("[id^=#select]").each(function(){ // для каждого элемента, чей id начинается с "select"
    var match = /^select(\d+)0$/.test(this.id); // соответствует маске?
    if (!match) return true; // нет — игнорируем
    dataArray.push("save" + match[1] + "=" + $(this).val()); // используя выдранное значение, добавляем значение в массив
})
 
$.ajax({
    url:"save.php",
    data: dataArray.join("&"), // соединяем куски массива так, что их разделяет "&"
    success: function(save){
        $(".save01").append(save);
}

frolvict 08.04.2010 13:32

Что никто не подскажет? Или уже пхп вопросы не касаются этого форума?

B~Vladi 08.04.2010 14:14

Разделом ошибся.

frolvict 08.04.2010 14:23

Не захотелось новую ветку создавать ради этого вопроса, подумал что может быть тут ответят. Ладно создам новую


Часовой пояс GMT +3, время: 15:32.