Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
22 / 22 / 8
Регистрация: 17.11.2012
Сообщений: 124

Ajax запрос

20.11.2015, 17:19. Показов 967. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если коротко:

1. Есть скрипт на чистом js:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function sw_ajax() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
            var executed_posts = document.getElementById("executed_posts");
            var waiting_response = document.getElementById("waiting_response");
            var _sw_response = xhttp.responseText;
            var sw_response = _sw_response.split("#");
            if (sw_response[1] != undefined){
                executed_posts.value = sw_response[0];
                    waiting_response.value = sw_response[1];
                }
            }
        };
        xhttp.open("GET", "<?php echo sw_get_manual_sender_url(); ?>", true);
        xhttp.send();
}
2. Есть аналогичный скрипт использующий jQuery:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function sw_ajax() {
    $.ajax({
        type: "GET",
        url: "<?php echo sw_get_manual_sender_url(); ?>",
        dataType: "html",
        success: function (response) {
            var executed_posts = document.getElementById("executed_posts");
            var waiting_response = document.getElementById("waiting_response");
            var _sw_response = response;
            var sw_response = _sw_response.split("#");
            if (sw_response[1] != undefined){
                executed_posts.value = sw_response[0];
                waiting_response.value = sw_response[1];
            }
        }
    });
}

Суть работы обоих скриптов сводиться к следующему:
Функция "sw_ajax()" вызывается при нажатии на html элемент на вебстранице (событие "onclick"). Эта же страница имеет два поля с идентификаторами "executed_posts" и "waiting_response". Эта функция производит ajax запрос на сервер к php скрипту на сервере. И скрипт на сервере возвращает строку вида: 45#57. Эти числа генерируются в процессе работы скриптом php на сервере. Данная javascript функция принимает эту строку, распарсивает на два числа, и вставляет эти числа в те два поля с идентификаторами "executed_posts" и "waiting_response".

Кратко о серверном php скрипте: когда он вызывается, то в процессе работы делает несколько запросов к БД, делает один POST запрос на удаленный сервер, снова делает несколько запросов к БД, некоторые вычисления и возвращает ответ вызвавшему его js скрипту, т.е. ответ функции "sw_ajax()" в виде строки 45#57.

Суть проблемы:
1. На локальном сервере все работает отлично. Т.е. я нажимаю на элементе, на сервере скрипт вызывается (я проверяю изменения в БД - так я узнаю, что скрипт был вызван удачно) и возвращает строку вида 45#57, и числа записываются в поля, что я наблюдаю.

2. Но на удаленном сервере, когда я нажимаю на элемент, то серверный скрипт вызывается (я снова проверил изменения в БД - убедился что скрипт был вызван удачно), но в поля на вебстранице ajax функция ничего не меняет. При просмотре во вкладке "консоль" в инструментах разработчика в браузере, я вижу следующую строку:

GET http://mysite.org/wp-content/p... sender.php 404 (Not Found)

Но проверяя состояние таблицы в БД - я убеждаюсь что каждый раз скрипт был удачно запущен. И если например я набираю в браузере адрес того самого скрипта http://mysite.org/wp-content/p... sender.php (имя сайта изменено), то получаю ту самую строку в окне браузера 45#57. Т.е. Скрипт при вызове не только выполняется, но и отправляет ответ.

Казалось бы - неправильно использую javascript, но если я меняю содержимое серверного скрипта на всего лишь одну строку:

echo '45#57';

то ajax функция работает без проблем на обоих серверах: на локальном и на удаленном.

Это навело меня на мысль, что проблема во времени исполнения серверного скрипта (он довльно громоздкий). Естественно на локальном сервере работа с базой данных, и отправка запросов происходит гораздо быстрее, не только потому, что все находится на одной машине, но и благодаря большей мощности локального компа.

Вопрос: Может ли слишком долгое исполнение серверного скрипта вызывать выше описанную проблему при ajax запросе (При прямом наборе в браузере адреса скрипта - ответ приходит меньше чем через секунду). Если да, то есть ли возможность изменить "время ожидания" ответа в настройках ajax функции и как?
Или может у кого есть идеи, в чем может быть проблема?

Проблема возникает в обоих функциях (на чистом js и на jQuery) одинаково.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2015, 17:19
Ответы с готовыми решениями:

AJAX запрос к файлу, который сам делает AJAX запрос
Прошу прощение за название темы, но я не знаю как это коротко описать... Здравствуйте. На странице HTML я обращаюсь к файлу PHP: ...

Ajax запрос в div с уже 'прилетевшим' ajax'om
Добрый день, ребят... Не нашёл отдельного раздела по ajax, а разобраться очч надо, т.к.в JS полный профан. Никак не могу разобраться уже...

JQuery, Ajax и LIVE!? Возможно ли повесить ajax запрос на live?
все делаю правильно, но у меня даже onSubmit alert(&quot;ok!&quot;); выводить не хочет? код примерно такой: ...

4
1 / 1 / 2
Регистрация: 22.12.2014
Сообщений: 159
20.11.2015, 22:19
Из написанного так и не понял, что работает что нет. Написано много, а по делу 2-3 строчки. Php скрипт сам работает ? Ответ отдает цифра#цифра, не через клиентские запросы, а сам скрипт если запустить ? Если после запуска скрипта выдает в браузере цифра#цифра значит скрипт работает и к серверной части претензий нет.
Это первая часть проверки.
Что касается клиентской части:
Цитата Сообщение от GradX Посмотреть сообщение
2. Но на удаленном сервере, когда я нажимаю на элемент, то серверный скрипт вызывается (я снова проверил изменения в БД - убедился что скрипт был вызван удачно), но в поля на вебстранице ajax функция ничего не меняет. При просмотре во вкладке "консоль" в инструментах разработчика в браузере, я вижу следующую строку:
GET http://mysite.org/wp-content/p... sender.php 404 (Not Found)
Потому, что
Цитата Сообщение от GradX Посмотреть сообщение
xhttp.open("GET", "<?php echo sw_get_manual_sender_url(); ?>", true);
sw_get_manual_sender_url() - эта функция вернула url документа которого нет у вас на сервере либо путь не правильный к документу указан, поэтому и 404 в консоли. А дальше ничего не понял, то у вас всё работает, то ничего не работает.
Цитата Сообщение от GradX Посмотреть сообщение
Казалось бы - неправильно использую javascript, но если я меняю содержимое серверного скрипта на всего лишь одну строку:
echo '45#57';
Вот, если сам серверный скрипт не выводит в браузер цифры(ответ после работы), значит возвращаемся к пункту проверки серверной части и исправляем пока не будет выдавать ответ.
Цитата Сообщение от GradX Посмотреть сообщение
то ajax функция работает без проблем на обоих серверах: на локальном и на удаленном.
значит проблема была в том, что серверный скрипт не возвращал нужных значений и где-то в серверном скрипте ошибка и ни таймаут ни аякс тут не при чём.
Смотрите при выполнении аякс или хмлхттп запроса ответ, что возвращает.
0
22 / 22 / 8
Регистрация: 17.11.2012
Сообщений: 124
21.11.2015, 00:23  [ТС]
Хм, неужели так сумбурно описал?
1. Нажмаю кнопочку в клиентской части -> js функция производит ajax запрос на сервер. (путь к файлу генерируемый php функцией тот же: http://mysite.org/wp-content/p... sender.php. Написал же: строку которую я набираю в браузере я копирую из консоли сообщения об ошибке 404. Т.е. тем самым я убеждаюсь что путь верный, т.к. при прямом наборе браузер показывает строку ответа. Т.е. уже здесь нестыковка: в консоли пишет что путь к файлу неверный, а при копировании этого "неверного пути" браузер показывает ответ. Во-вторых, изменения в БД серверный скрипт производит - занчит ajax запрос таки вызвал серверный скрипт. В том то и странность. Что ajax скрипт в место ответной строки получает ответ 404, хотя судя по БД скрипт исполняется. А в браузере - вообще все работает.
0
1 / 1 / 2
Регистрация: 22.12.2014
Сообщений: 159
21.11.2015, 03:31
Я только одного понять тогда не могу если вы пишите:
Цитата Сообщение от GradX Посмотреть сообщение
Казалось бы - неправильно использую javascript, но если я меняю содержимое серверного скрипта на всего лишь одну строку:
echo '45#57';
то ajax функция работает без проблем на обоих серверах: на локальном и на удаленном.
При этом получается нет что ли ошибки 404 ? Тогда такого быть не может. Если сам серверный скрипт работает и возвращает значения значит всё должно работать. Ошибка 404 только из-за этого может быть.
JavaScript
1
2
xhttp.open("GET", "<?php echo sw_get_manual_sender_url(); ?>", true);
url: "<?php echo sw_get_manual_sender_url(); ?>",
Можно вообще скришот лога с консоли увидеть и скришот ответа/responce от аякс запроса. Попробуйте вместо эхо просто вставить путь к этому серверному скрипту "путь к скрипту/manual-sender.php" то есть чисто можно проверить путь и сам скрипт. А там уже можно будет дальше думать где проблема.
0
22 / 22 / 8
Регистрация: 17.11.2012
Сообщений: 124
21.11.2015, 17:45  [ТС]
Вот и я думаю, что такого быть не может - вот только как выясняется может. Разница между рабочим и нерабочим варинтом только в содержании скриптов (один - содерижит несколько сотен строк кода, работает с БД, делает запрос на сторонний сервер, производит разные вычисления; второй (тестовый) - содержит только одну строку). Т.е. путь к файлу один и тот же. И не ясно как сервер может отвечать 404.

Добавлено через 5 минут
В принципе я нашел решение, использовав API от движка сайта (WordPress) для отправки этого ajax запроса - и он работает отлично.

Есть у меня подозрение, что на локальном сервере какой-то модул в Apache не активен, и этот (или эти) модуль на локальном сервере не позволяет WP "перехватывать" ajax запрос, а вот на внешнем сервере - WP вмешивается в процесс, и отвечает, что мол нету такого скрипта.

Так что больше грешу на WordPress.

Эта CMS иногда выдает интересные "сюрпризы" при глубокой разарботке. Например то, что работает на одиночной установке - не всегда удается запустить в multisite mode (в некоторых случаях не позволяет загружать wordpress environment в сторонний скрипт - хотя на одиночной установке - разрешает).

Добавлено через 3 минуты
И да, в дополнение к последнему выводу (что всему виной wordpress) полный скрипт (тот что глючит) использует wordpress environment.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2015, 17:45
Помогаю со студенческими работами здесь

Ajax запрос
Ничего не происходит ,не могу понять ,что не так. Ошибок в компиляции нет $(function(){ ...

Ajax запрос
Здравствуйте. Помогите с проблемкой. Нужно чтобы при загрузке страницы отправляло запрос скрипту, без каких либо ответов и тд. ...

Ajax запрос
Доброго времени суток. Вот уже 2ой день ломаю голову над запросом. Вроде бы все элементарно, но почему-то не выходит так, как должно...

ajax запрос
есть формапервого листа: &lt;form action=&quot;&quot; method=&quot;get&quot;&gt; Цена &lt;br &gt; &lt;input name=&quot;price&quot; type=&quot;text&quot; /&gt;&lt;br /&gt; &lt;h1&gt;...

Ajax запрос
Здравствуйте, у меня проблемы с ajax запросом, никак не пойму что не правильно, помогите пожалуйста, подскажите, вот кот ajax...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru