Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2013, 15:25
Интересующийся
Отправить личное сообщение для kefalia Посмотреть профиль Найти все сообщения от kefalia
 
Регистрация: 16.12.2013
Сообщений: 21

Отправка запроса 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-скрипт.

В чем может быть ошибка?
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2013, 16:05
Интересующийся
Отправить личное сообщение для kefalia Посмотреть профиль Найти все сообщения от kefalia
 
Регистрация: 16.12.2013
Сообщений: 21

Вопрос снят.
Все работает, но возвращается не нужное значение, а целая страница. Пошла думать, как вытащить из нее значение.
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2013, 16:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от 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);
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2013, 16:26
Интересующийся
Отправить личное сообщение для kefalia Посмотреть профиль Найти все сообщения от kefalia
 
Регистрация: 16.12.2013
Сообщений: 21

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 выводится полный код страницы
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2013, 16:38
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

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

очевидно это что-то и выводится в alert...
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2013, 16:45
Интересующийся
Отправить личное сообщение для kefalia Посмотреть профиль Найти все сообщения от kefalia
 
Регистрация: 16.12.2013
Сообщений: 21

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

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

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

Последний раз редактировалось kefalia, 18.12.2013 в 16:59.
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2013, 16:51
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

kefalia, при чем здесь комментирование, я имею ввиду помимо этих 4-х строк в test_selected_category.php еще есть какой то код? И html код элемента с id=category_id покажите...
Ответить с цитированием
  #8 (permalink)  
Старый 18.12.2013, 16:54
Интересующийся
Отправить личное сообщение для kefalia Посмотреть профиль Найти все сообщения от kefalia
 
Регистрация: 16.12.2013
Сообщений: 21

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


Отредактировала предыдущее сообщение
Ответить с цитированием
  #9 (permalink)  
Старый 18.12.2013, 17:08
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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

Последний раз редактировалось Vlasenko Fedor, 18.12.2013 в 17:10.
Ответить с цитированием
  #10 (permalink)  
Старый 18.12.2013, 17:23
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

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']; ?>
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема при передаче запроса POST martinss AJAX и COMET 7 09.04.2011 23:35
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Получение в JavaScript значений переменных, посланных методом POST Ratibor Redoran Общие вопросы Javascript 5 08.06.2010 16:36
JavaScript отправка данных методом POST FORUS Серверные языки и технологии 15 29.05.2010 21:11