Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 17

AJAX вместо результата обработчика возвращает, исходный код обработчика

21.11.2016, 22:55. Показов 3539. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, начал изучать AJAX и столкнулся с проблемой, при GET запросе в котором я стучу в файл php и требую что бы он вернул текст с БД responseText возвращает код самого обработчика, а не результат его работы. Подскажите пожалуйста почему так?Кеш чищу, в .htaccess поставил заголовки no-cache и no-store. Пока что интересен именно этот пример, без JSON или низкоуровневого AJAX.Если что неправильно пишите.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function fillCategorie(){
        var req = getXmlHttpRequest();
 
        req.onreadystatechange = function(){
            if(req.readyState != 4) return;
            var selCategory = document.getElementById('selCategory');
            var responeText = req.responseText;
            var categ = responeText.split('\n');
            console.log(categ);
            /*for(var i = 0; i < categ.length; i++){
                var parts = categ[i].split(':');
                var option = document.createElement('option');
                option.setAttribute('value', parts[0]);
                var optionText = document.createTextNode(parts[1]);
                option.appendChild(optionText);
                selCategory.appendChild(option);
            }*/
            selCategory.size = selCategory.options.length;
        };
 
        req.open('GET', 'getcategories.php', true);
        req.send(null);
    }
        
        // При завершении загрузки страницы
        window.onload = function(){
        fillCategorie();
        }
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
/*
** Скрипт возварщает список категорий книг
*/
 
// Передаем заголовки
header('Content-type: text/plain; charset=utf-8');
header('Cache-Control: no-store, no-cache');
header('Expires: ' . date('r'));
 
// Открытие БД
$db = new SQLite3("books.db");
 
// Вывод категорий
echo getChildCategories($db);
 
// Закрытие БД
unset($db);
 
// =============================================================================
 
// Рекурсивная функция, возвращает строку с категориями, входящими в указанную
// Параметры:
//     $db     - открытавя база данных
//     $parent - код родительской категории
//     $indent - строка, формирующая смещение символов
function getChildCategories(SQLite3 $db, $parent=0, $indent="")
{
    $result = '';
    $sql = 'SELECT * FROM category WHERE parent=' . $parent;
    $res = $db->query($sql);
    while ($row = $res->fetchArray(SQLITE3_ASSOC))
    {
        $result .= $row['id'] . ':' . $indent . $row['title'] . "\n";
        $result .= getChildCategories($db, $row['id'], $indent . '...');
    }
    return $result;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2016, 22:55
Ответы с готовыми решениями:

Код обработчика для ajax отправки
Помогите разобраться, есть код, который отправляет данные в обработчик. Но самого обработчика нет (удалили). $.ajax({ ...

Вызов обработчика кнопки из другого обработчика.
Есть кнопка, есть у ней обработчик, который делает нечто полезное. Как вызвать выполнения обработчика этой кнопки из обработчика другой...

Ajax загрузка обработчика
Есть форма &lt;head&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;install/js/jquery-2.0.3.min.js&quot;&gt;&lt;/script&gt; &lt;script...

9
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
22.11.2016, 09:36
Что такое у вас getXmlHttpRequest()?
0
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
22.11.2016, 10:46
Цитата Сообщение от Balanaar Посмотреть сообщение
Что такое у вас getXmlHttpRequest()?
Судя по использованию этой функции, она возвращает объект XHR.
По теме: автор, попробуй заменить код обработчика на echo 'abcxbbxcbxcb' (а еще прямо через браузер открыть php файл напрямую) и если опять выведется код а не результат, то это будет означать, что PHP файлы не выполняются.
0
Юзер с абсолютным слухом
 Аватар для Опан
709 / 489 / 195
Регистрация: 17.12.2010
Сообщений: 1,428
22.11.2016, 13:46
Попробуйте вместо getXmlHttpRequest() написать new XMLHttpRequest()
0
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
22.11.2016, 14:19
Цитата Сообщение от Опан Посмотреть сообщение
Попробуйте вместо getXmlHttpRequest() написать new XMLHttpRequest()
Насколько я понял, у ТС отрабатывает запрос, но вываливается PHP-обработчик как текст в ответ.
0
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 17
22.11.2016, 14:32  [ТС]
Цитата Сообщение от Balanaar Посмотреть сообщение
Что такое у вас getXmlHttpRequest()?
getXmlHttpRequest() это кроссбраузерная функция вызова XHR, для webkit она создает new XMLHttpRequest(), а для ie создает ActiveXObject('Msxml2.XMLHTTP').
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function getXmlHttpRequest(){
    if(window.XMLHttpRequest){
        //for normal browser
        try{
            return new XMLHttpRequest();
        } catch(e){}
    }else if(window.ActiveXObject){
        //for ie7+
        try{
            return new ActiveXObject('Msxml2.XMLHTTP');
        } catch(e){}
        //for ie6 and early
        try{
            return new ActiveXObject('Microsoft.XMLHTTP');
        } catch(e){}
    }
    return null;
}
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
22.11.2016, 14:38
Цитата Сообщение от Razip Посмотреть сообщение
вываливается PHP-обработчик как текст в ответ
Скорее всего ТС имел в виду именно это. Хотя мне, честно говоря, трудно представить, как ajax-запросом можно "случайно" получить содержимое файла php при поднятом сервере...

Добавлено через 2 минуты
Aaron212, что показал прямой вызов скрипта из адресной строки?
0
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 17
22.11.2016, 14:48  [ТС]
Данная проблема решилась сама по себе, а именно при работе с AJAX, GET пихает, не результат, а сам код php обработчика, как текста ответа, при этом закидывая его в кеш. Как видно из скрипта php, заголовки со сбросом кеша передаю(не знаю на сколько они правильны, так как просто нашел их в интернете), так же создал файл в директории с проэктом, .htaccess с теми же заголовками, все это для сброса кеша, но в итоге результата "0". Немного помучившись, решил отложить это до утра, сегодня опять загрузил все и вуаля!Все работает как надо, так что возник другой как бороться с кешем или как пользоваться get запросами, без перезагрузки компьютера)
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
22.11.2016, 15:00
Лучший ответ Сообщение было отмечено Aaron212 как решение

Решение

Цитата Сообщение от Aaron212 Посмотреть сообщение
GET пихает, не результат, а сам код php обработчика
Так не бывает.
Во-первых, GET никого никуда не пихает. Браузер (клиент) с помощью GET-запроса запрашивает у сервера некую информацию по неким параметрам. Если был выполнен запрос на php-скрипт, расположенный на сервере, то сервер по дефолту должен был этот скрипт запустить и выдать клиенту результат выполнения скрипта. Это сервер вам отвечает, а не "GET пихает".
Другое дело, что ответ от сервера действительно может кешироваться. Хотя насколько мне известно, по умолчанию кеширования не происходит. Попробуйте в этом же скрипте вывести какую-нибудь другую информацию. Если браузер всё равно будет показывать старую картину, значит ответ кешируется. Вам следует убрать из скриптов все заголовки, относящиеся к кешу, а затем обновить страницу с помощью ctrl-f5 (для полной ее перезагрузки).
1
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 17
22.11.2016, 16:58  [ТС]
Цитата Сообщение от Balanaar Посмотреть сообщение
Так не бывает.
Во-первых, GET никого никуда не пихает. Браузер (клиент) с помощью GET-запроса запрашивает у сервера некую информацию по неким параметрам. Если был выполнен запрос на php-скрипт, расположенный на сервере, то сервер по дефолту должен был этот скрипт запустить и выдать клиенту результат выполнения скрипта. Это сервер вам отвечает, а не "GET пихает".
Другое дело, что ответ от сервера действительно может кешироваться. Хотя насколько мне известно, по умолчанию кеширования не происходит. Попробуйте в этом же скрипте вывести какую-нибудь другую информацию. Если браузер всё равно будет показывать старую картину, значит ответ кешируется. Вам следует убрать из скриптов все заголовки, относящиеся к кешу, а затем обновить страницу с помощью ctrl-f5 (для полной ее перезагрузки).
Спасибо, все вроде бы работает, любые изменения в обработчике фиксируются, возможно вчера был просто не мой день.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2016, 16:58
Помогаю со студенческими работами здесь

PHP/AJAX значение обработчика передаётся многократно
Вопрос в общем то связан с моей другой темой https://www.cyberforum.ru/javascript-jquery/thread1481361.html Но дабы не отходить от...

Как отправить AJAX и остаться на странице обработчика
Мне нужно передать данные через ajax и остаться на странице обработчика.(там у меня формируется pdf файл). Нужно передать данные html...

Отправка данных в БД, полученных с файла обработчика ajax'om
:sorry: В Css блок, выводятся данные, полученные с файла обработчика, &quot;obr.php&quot; ajax'om т.е например в блок с id=name, вывелась...

AJAX выводит код скрипта вместо его выполнения и вывода результата
ajax.js var default_content=&quot;&quot;; $(document).ready(function(){ checkURL(); $('ul li a').click(function (e){ ...

Не работает код обработчика формы
пОЧЕМУ НЕ РАБОТАЕТ КОД?... форма &lt;html&gt; &lt;head&gt; &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=windows-1251&quot;&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru