Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отправка запроса POST Javascript (https://javascript.ru/forum/events/43738-otpravka-zaprosa-post-javascript.html)

kefalia 18.12.2013 15:25

Отправка запроса POST Javascript
 
Добрый день. Осваиваю отправку post-запросов посредством javascript. После изучения документации и форумов для получения id выбранного пользователем значения из списка <select> было написано следующее:

function postResult(){
        var xhr = new XMLHttpRequest();
	var sel_cat=document.getElementById("category_id").value;
        var result_cat = encodeURIComponent(sel_cat);
 
    xhr.open("POST", "test_selected_category.php", true)
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    xhr.send(result_cat);
    xhr.onreadystatechange = function (){ 
	if(xhr.readyState == 4){ 
	if(xhr.responseText == "true"){ 
	alert("YES!"); 
	} else { 
	alert("NO!"); 
	} 
	xhr.result_cat; 
	} 
	} 
}


test_selected_category.php

<?php  $result_cat=$_POST['result_cat']; 
		echo $result_cat;
?>



Стабильно возвращается NO, то есть, никакого результата сервером не присылается.
Файл test_selected_category.php доступен для чтения и записи и лежит в той же директории, где и index.php, в котором прописан js-скрипт.

В чем может быть ошибка?

kefalia 18.12.2013 16:05

Вопрос снят.
Все работает, но возвращается не нужное значение, а целая страница. Пошла думать, как вытащить из нее значение. :)

danik.js 18.12.2013 16:12

Цитата:

Сообщение от kefalia
Все работает, но возвращается не нужное значение, а целая страница

Это как? Должно вернуться только значение из POST переменной result_cat. Но вы совершаете ошибку и неправильно его передаете.
Цитата:

Сообщение от kefalia
xhr.send(result_cat);

Тут вы передаете xhr.send("true") или xhr.send("false"), а надо:
xhr.send("result_cat=true")

Для этого надо написать
xhr.send("result_cat=" + result_cat);

kefalia 18.12.2013 16:26

function postResult(){
    var xhr = new XMLHttpRequest();
	var sel_cat=document.getElementById("category_id").value;
    var result_cat = encodeURIComponent(sel_cat);
    xhr.open("POST", "test_selected_category.php", true)
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    xhr.send("result_cat=" + result_cat);
    xhr.onreadystatechange = function (){ 
	if(xhr.readyState == 4){ 
		alert(xhr.responseText);
	
	xhr.result_cat; 
	} 
	} 
}


При подобном положении вещей в alert выводится полный код страницы :)

Rise 18.12.2013 16:38

kefalia, ну а в test_selected_category.php что то акромя этого есть:
<?php 
        $result_cat = $_POST['result_cat'];
        echo $result_cat;
?>

очевидно это что-то и выводится в alert...

kefalia 18.12.2013 16:45

Rise,
При комментировании данных строк никаких изменений не происходит. И, как я понимаю, в переменной $result_cat хранится переданное посредством POST значение. Или я ошибаюсь?

Если вопрос был в том, есть ли что-то еще кроме вышеуказанного в файле test_selected_category.php, то нет: в этом файле, помимо вышеупомянутого кода, ничего нет.

Если начать не с хвоста, а с головы: сайт сделан на joomla и, соответственно, помимо файла test_selected_category.php есть еще index.php, в котором генерируется шаблон страницы и много других.
В alert попадает абсолютно вся информация со страницы (которая состоит из нескольких подключаемых .php файлов), и я уже второй день не могу понять, почему. Ведь передаваться должно только значение value?

Rise 18.12.2013 16:51

kefalia, при чем здесь комментирование, я имею ввиду помимо этих 4-х строк в test_selected_category.php еще есть какой то код? И html код элемента с id=category_id покажите...

kefalia 18.12.2013 16:54

Rise,
<select id="category_id" name="category_name" class="inputbox" onchange='postResult(); '>
<option value = "0"/>Все категории</option>				    
				    ...
</select>


Отредактировала предыдущее сообщение :)

Vlasenko Fedor 18.12.2013 17:08

kefalia есть как минимум 4 варианта обработки ajax запрса в joomla
1. Контроллер. Вы можете к существующему подсунуть и добавить свой
2. Плагин обрабатывая событие onAfterInitialise()
3. Передача обработки файлу с отдельной инициализацией фреймворка (костыль)
4. Передача обработки файлу лежащему внутри вашего шаблона (костыль)
5. В Joomla 3.2 встроен компонент ajax
А теперь самое главное, после формирования ответа, вы должны закончить работу приложения.
То есть после ответа должно быть
die;
или
exit;

Rise 18.12.2013 17:23

kefalia,
<select id="category_id" name="category_name" class="inputbox" onchange="postResult(this)">
	<option value="0">Все категории</option>
	<option value="1">Категория 1</option>
	<option value="2">Категория 2</option>
	.....
</select>

<script>
function postResult(elem) {
	var xhr = new XMLHttpRequest();
	var params = 'result_cat=' + elem.value;
	xhr.open('POST', '/test_selected_category.php', true);
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xhr.onreadystatechange = function() {
		if (this.readyState == 4 && this.status == 200) {
			alert(this.responseText);
		}
	}
	xhr.send(params);
}
</script>


test_selected_category.php положить в корень сайта, с кодом:
<?php echo $_POST['result_cat']; ?>


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