Аякс получение данных.
Здравствуйте. Встала задача не очень сложного аякс каталога, с которым возникли некоторые трудности… А именно: s7535.h7.modhost.pro
Суть в том что почему то при аякс запросе в чанках игнорируется почти все, кроме хтмл.
Казалось бы все должно быть просто, из формы отправляем запрос куда то (в примере выше запрос идет на ajax.php)
В php файлике идет запрос чанка, $modx->getChunk(), а в ответ приходит только html, теги не парсятся. Подскажите пожалуйста, где я налажал?
Суть в том что почему то при аякс запросе в чанках игнорируется почти все, кроме хтмл.
Казалось бы все должно быть просто, из формы отправляем запрос куда то (в примере выше запрос идет на ajax.php)
В php файлике идет запрос чанка, $modx->getChunk(), а в ответ приходит только html, теги не парсятся. Подскажите пожалуйста, где я налажал?
Комментарии: 6
Теперь я вообще в тупике. Дело не в аяксе, если просто открыть
s7535.h7.modhost.pro/ajax.php
То точно так же никакие теги не распарсятся. Хотя api подключено, работать с modx я могу в скрипте…
s7535.h7.modhost.pro/ajax.php
То точно так же никакие теги не распарсятся. Хотя api подключено, работать с modx я могу в скрипте…
Пример ajax.php, который использую в последних проектах.
Работает исправно, все парсится и работает.
Работает исправно, все парсится и работает.
<?php
define('MODX_API_MODE', true);
require 'index.php';
//подключаем pdoTools
$pdo = $modx->getService('pdoTools');
// Откликаться будет ТОЛЬКО на ajax запросы
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
return;
}
// Сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию
// Если в массиве POST нет действия - выход
if (!empty($_POST['action'])) {
switch ($_POST['action']) {
case 'snippetName':
$tvs = $_POST['tvs'];
if (!empty($tvs)) {
$res = $pdo->runSnippet('@FILE snippets/snippetName.php', array('tvs' => $tvs));
}
if (empty($res)) {
$res = 'Подходящих записей не найдено. Попробуйте упростить параметры поиска';
}
break;
}
} else {
return;
}
if (!empty($res)) {
die($res);
}
Полученный чанк при ajax-запросе нужно распарсить, допустим в своём классе это можно сделать так:
private function getParserTag($content)
{
$maxIterations = (integer) $this->modx->getOption('parser_max_iterations', null, 10);
$this->modx->getParser()->processElementTags('', $content, false, false, '[[', ']]', array(), $maxIterations);
$this->modx->getParser()->processElementTags('', $content, true, true, '[[', ']]', array(), $maxIterations);
return $content;
}
Конкретно эта функция (естественно с заменой $this на $modx) складывает скрипт с 500 ошибкой, но суть понял. Пойду гуглить информацию, спасибо.
global modx;
в функции прописали?Должно быть так:
// Подключаем
require_once 'config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$modx->getService('error','error.modError', '', '');
function getParserTag($content)
{
global $modx;
$maxIterations = (integer) $modx->getOption('parser_max_iterations', null, 10);
$modx->getParser()->processElementTags('', $content, false, false, '[[', ']]', array(), $maxIterations);
$modx->getParser()->processElementTags('', $content, true, true, '[[', ']]', array(), $maxIterations);
return $content;
}
$tpl = $modx->getChunk("head");
echo getParserTag($tpl);
У меня замечательно работает, и сниппет внутри чанка head, отрабатывает.
Это именно то что я все время забываю, спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.