Пользовательский Ajax Concrete5 в блочном представлении

На Concrete5-8.1.0 я создал пользовательский блок с функциональностью Ajax, основанный главным образом на документах concrete5 — Реализация Ajax в шаблонах блочного представления. Однако, в отличие от примера, я не хочу перезагружать блочное представление, я хочу передавать определенные сообщения на основе ввода. Я попробовал простой echo '{"msg":"ok"}'; а также return '{"msg":"ok"}); как тест, но запросы к функции дали пустой ответ.

я нашел Как отправить ответы JSON с помощью Concrete5.7 и использовал Вариант 2 (для большего контроля кодов ошибок), что привело к следующему тестовому коду:

public function action_submit($token = false, $bID = false) {

if ($this->bID != $bID) {
return false;
}
if (Core::make('token')->validate('get_paper', $token)) {

//save to database
//removed for brevity

//send email
if ($this->emailto != '') {
//removed for brevity
}

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
return new Response(
json_encode(array('msg' => 'ok')),
200,
['Content-Type' => 'application/json']
);
} else {
Redirect::page($page)->send();
}
}
else {
return false;
}
exit;
}

Функция сохранения базы данных и электронной почты работает, как и ожидалось, но ответ по-прежнему пуст. В Chrome Dev Tools я вижу правильный Content-Type (в качестве теста я пробовал text/html и увидел, что изменения в инструментах разработки), но нет контента. Интересно, если я поменяю статус с 200 в 500 Я не только вижу изменение статуса в инструментах разработчика, я также вижу {"msg":"ok"} контент, который я ожидаю, но меняю статус обратно на 200 и содержимое снова пусто.

Кажется, я упускаю что-то простое … Я проверил, что все кэширование отключено в C5 (сайт все еще находится в разработке), я также проверил, что запрос jQuery включает cache:false, но решение ускользает от меня.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]