Foren / National / Russian / Тех. поддержка / AJAX передача из JS в сценарий PHP

Uch
#1 4. Dezember 2012, 15:40

Пытаюсь передать запрос в ajax сценарий php из js скрипта. В ответ постоянно получаю ошибку, что страница не найдена. Адрес 100% верный - проверял через адресную строку и получал ответ через echo в сценарии. Скрипт передает в т.ч. cot_xg() 
Что за ...?

Wadik
#2 4. Dezember 2012, 17:18

Может это нужно http://www.cotonti.com/forums?m=posts&q=7004

Uch
#3 4. Dezember 2012, 17:23

Неа

Moool13
#4 4. Dezember 2012, 17:57

Uch, приведи код, который отправляет данные.

Uch
#5 4. Dezember 2012, 18:12

Отправляет flash, по этому не могу привести код.

Добавлено 2 минуты спустя:

Забыл упомянуть, что ошибка возникает при использовании метода POST. При GET ошибка отсутствует.

Добавлено 2 минуты спустя:

Ошибка:

Ошибка в ссылке

Неверный URL

Статус в консоли FireBug : 403 Forbidden

Moool13
#6 4. Dezember 2012, 18:29

Uch, попробуй cot_xg() заменить на {PHP.sys.xk} (или &x={PHP.sys.xk}).

Alex300
#7 4. Dezember 2012, 18:41

При передаче POST запроса параметр x тоже должен прийти через POST. Иначе получим Forbidden. Защита движка от прямой передачи данных с другого хоста (от ботов)

Например при выводе формы этот параметр добавляется к форме автоматически скрытым полем ввода.

Получить его через JavaScript, для отправки Ajax запроса можно, например, так:

 var x = $('input[name="x"][type="hidden"]').first().val();

Сам запрос при этом будет выглядеть примерно вот так:

	$.post('index.php?e=some_ext&a=ajxGetChildValues',
	            {parent_dicId: pDicId, parent_dicValue: pDicValue, x: x },
	            function(data) {
	                // Обработка полученных данных
	        }, 'json');

(Важно последнее x: x)

Ну или если отправляете саму форму через POST при помощи функции jQuery  .serialize() ничего дополнительно делать не надо.

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Uch
#8 4. Dezember 2012, 20:31

Спасибо! Буду пробовать.

Macik
#9 5. Dezember 2012, 06:22

Алекс не совсем прав, параметр «Х» при Пост запросе (при услови, что это аякс запрос) можно передавать как пост параметром, так и в строке запроса (гет параметром). Для убедительности можно глянуть строки 568-572 файла common.php.

-----

С описанной проблемой сталкивался когда прикручивал к одному из сатов флэшовый аякс загрузчик файлов. Бился долго и параметр Х передавал, и другие варианты пробовал. Оказалось, что он (загрузчик) работает в 2 этапа, первым делает запрос на наличие файла (и этот запрос отрабатывает нормально с Х параметром), а делее идет собственно загрузка файла, в которой он обращается «напрямую» и параметров не передает. 

Решил в конце концов, примерно так, как описано в приведенной выше ссылке:  т.е. повесил на хук «init» проверку входящего запроса, если это флэш загрузчик - отключаем проверку XSS:

if ($_SERVER['HTTP_USER_AGENT']=='Shockwave Flash') {
 define('COT_NO_ANTIXSS', TRUE);
}

Это упрощенный код. для надежности надо еще проверять прочие параметры запроса.

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F