Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   неопределенное число параметров (https://javascript.ru/forum/misc/39357-neopredelennoe-chislo-parametrov.html)

nadda 26.06.2013 15:24

неопределенное число параметров
 
Добрый день.
Написал вот такую функцию. Первым параметром передается страница-обработчик, последующими - инпуты, откуда вытаскивать значения.
function requestItem() {
    var post_str;
    var key_str;
    var val_str;
    for(var i=1;i<arguments.length;i++) {
	key_str=arguments[i];
	val_str = document.getElementById(arguments[i]).value;
	post_str +=key_str+'='+val_str+'&';
    }
http.open("POST",arguments[0], true);
http.onreadystatechange=echoPost;
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send(post_str);
}

<input type="text" id="item_id" name="id">
<input type="text" id="item_amnt" name="amnt">
<input type="submit" value="OK" onclick="requestItem('handler','item_id','item_amnt');">

И почти работает.... во только выдает undefined и лепит к нему первый id массива.
Это вывод $_POST:
print_r ($_POST);

Array ( [0] => Array ( [undefineditem_id] => item [item_amnt] => 12 ) )

Подскажите, где ошибка?
Спасибо

nadda 27.06.2013 00:32

Спасибо большое, помогло.
Хотя я думал что при объявлении переменной, если значение не указано явно, ей автоматом присваивается NULL.

danik.js 27.06.2013 06:48

Если значение не определено, то оно неопределенное (undefined по-английски)
Кстати, ты вкурсе про существование массивов в javascript?

function requestItem(url, fields) {
	var params = [];
	for (var i = 0; i < fields.length; i++) {
		var key = fields[i];
		var value = document.getElementById(key).value;
		params.push(key + '=' + value);
	}
	http.open("POST", url, true);
	http.onreadystatechange = echoPost;
	http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	http.send(params.join('&'));
}

requestItem('/request/item/', ['item_id', 'item_amt']);

nadda 27.06.2013 11:09

Спасибо за Ваш вариант. Я не очень дружу с JS, поэтому возможно скрипты получаются длиннее. Насколько я понял, Вы создали пустой массив в строке 2 - var params = [] , затем методом push напихали туда данных (6 строка). И в 11 строке, при отправке, Вы методом join присоединили к каждой паре key - value амперсанд.

Получилось короче. Еще раз спасибо большое. Учту в будущих скриптах.


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