Отправка запроса 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-скрипт. В чем может быть ошибка? |
Вопрос снят.
Все работает, но возвращается не нужное значение, а целая страница. Пошла думать, как вытащить из нее значение. :) |
Цитата:
Цитата:
xhr.send("result_cat=true") Для этого надо написать xhr.send("result_cat=" + result_cat); |
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 выводится полный код страницы :) |
kefalia, ну а в test_selected_category.php что то акромя этого есть:
<?php $result_cat = $_POST['result_cat']; echo $result_cat; ?> очевидно это что-то и выводится в alert... |
Rise,
При комментировании данных строк никаких изменений не происходит. И, как я понимаю, в переменной $result_cat хранится переданное посредством POST значение. Или я ошибаюсь? Если вопрос был в том, есть ли что-то еще кроме вышеуказанного в файле test_selected_category.php, то нет: в этом файле, помимо вышеупомянутого кода, ничего нет. Если начать не с хвоста, а с головы: сайт сделан на joomla и, соответственно, помимо файла test_selected_category.php есть еще index.php, в котором генерируется шаблон страницы и много других. В alert попадает абсолютно вся информация со страницы (которая состоит из нескольких подключаемых .php файлов), и я уже второй день не могу понять, почему. Ведь передаваться должно только значение value? |
kefalia, при чем здесь комментирование, я имею ввиду помимо этих 4-х строк в test_selected_category.php еще есть какой то код? И html код элемента с id=category_id покажите...
|
Rise,
<select id="category_id" name="category_name" class="inputbox" onchange='postResult(); '> <option value = "0"/>Все категории</option> ... </select> Отредактировала предыдущее сообщение :) |
kefalia есть как минимум 4 варианта обработки ajax запрса в joomla
1. Контроллер. Вы можете к существующему подсунуть и добавить свой 2. Плагин обрабатывая событие onAfterInitialise() 3. Передача обработки файлу с отдельной инициализацией фреймворка (костыль) 4. Передача обработки файлу лежащему внутри вашего шаблона (костыль) 5. В Joomla 3.2 встроен компонент ajax А теперь самое главное, после формирования ответа, вы должны закончить работу приложения. То есть после ответа должно быть die;или exit; |
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. |