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

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

21.11.2016, 22:55. Показов 3573. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru