1PeGaS
@1PeGaS

Как в modx отправить ajax запрос используя компонент?

Я отправляю аякс запрос, на ресурс с именем ajax:
$.ajax({
               type: "POST",
               url: '/ajax',
               data: {
                    action: 'getProductPopup',
                    data: {id: id}
                },
               success: function(data) {
                    $('.content__wrapper').html(data);
               }
         });


В этом ресурсе у меня вызывается сниппет с таким кодом:
<?php
$action = $_POST['action'];
$data = $_POST['data'];

if (!function_exists('ajaxResponse')) {
    function ajaxResponse($success, $data, $msg) {
        return json_encode(['success' => $success, 'data' => $data, 'msg' => $msg]);
    }
}

switch($action) {
    case 'getProductPopup':
        if (!array_key_exists('id', $data)) {
            ajaxResponse();
        }
        
        $pdoTools = $modx->getService('pdoTools');
        
        $id = intval($data['id']);
        
        // msProduct наследник modResource
        $obj = $modx->getObject('msProduct', $id);
        
        if (!$obj) {
            ajaxResponse();
        }
        
        return $pdoTools->getChunk('popupProduct', $obj->toArray());
    break;
    default:
        return false;
    break;
}

return false;


Как мне сделать всё то же самое, только в файле public_files/components/ajaxService/index.php?

я пробовал в этот файл скопировать код сниппета и в аяксе указать путь public_files/components/ajaxService/index.php, но выдаёт ошибку 500
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
i__dmitry
@i__dmitry
Weaving a web
А вы в своем файле public_files/components/ajaxService/index.php подключали $modx? Ведь в сниппете он используется.
// Подключаем
define('MODX_API_MODE', true);
require $_SERVER['DOCUMENT_ROOT'].'/index.php';
 
// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
 
//Проверяем работу:
if ($res = $modx->getObject('modResource', 1)) {
    print_r($res->toArray());
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы