Я хочу использовать возможность ajax не обновлять страницу или перенаправлять пользователя на страницу регистрации. Созданы модальные окна входа/регистрации. У меня есть вход в javascript ajax, отлично работающий с использованием ajax-вызова для входа в API без каких-либо конфигураций или добавленных модулей. Я хочу интегрировать регистрационную форму таким же образом. Я хочу, чтобы регистрация:
- показать в модальном режиме - это работает.
- Отправить код javascript работает с preventDefault
- ответ не работает.
Ajax Post возвращает '<', очевидно, это возвращает какой-то html. Откуда мне знать, как передавать данные в вызове ajax и чего ожидать в ответ?
Мой пример ниже:
<style>
.scroll {
//background-color: #fed9ff;
//width: 600px;
height: 500px;
overflow-x: hidden;
overflow-y: auto;
//text-align: center;
//padding: 20px;
}
.close {
margin: 10px 25px 0px;
}
#log-title {
margin-left:25px;
}
</style>
<a data-target="#register-modal" data-toggle="modal" class="" id="" href="#register-modal">Register / Create an Account </a>
<div id="overlay_container"></div>
<!-- Register to download button so stays on same page. -->
<div id="register-modal" class="modal" tabindex="-1" role="dialog" aria-hidden="true">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h3 id="log-title">Please register:</h3>
<div class="modal-dialog">
<div class="modal-content scroll">
<?php
$register_form = \Drupal::service('entity.form_builder')->getForm(\Drupal\user\Entity\User::create([]), 'register', []);
// Load the service renderer
$render = Drupal::service('renderer');
$rform = $render->renderPlain($register_form);
echo $rform;
?>
</div> <!-- Register modal content end-->
</div><!-- Register modal-dialog end -->
</div><!-- Register modal end -->
<script>
var registerForm = document.getElementById('user-register-form');
if (registerForm ) {
// capture registration submit, prevent from submission and use ajax to get response
registerForm.onsubmit = async (e) => {
e.preventDefault();
// callRegCaptcha();
elms =document.getElementById("user-register-form").elements;
var url = "https://website/user/register"; //website is a true url
fetch(url, {
method: 'POST',
body: elms
})
.then(response=>response.json())
.then(json => {
console.log(json);
});
}
}
</script>
Все работает, кроме ответа. Я нигде не могу найти, чего ожидать в ответ. Или если я правильно привязываю данные вязов. Может ли кто-нибудь помочь мне в этой области?
Для входа в систему требовалось передать csrfToken вместе с
заголовки: {
«Тип контента»: «приложение/json»,
«X-CSRF-токен»: csrfToken
},
и «?_format=json», добавленный к URL-адресу, но для регистрационных значений я работаю вслепую. У кого-нибудь есть информация о том, что пройти? В ответ я получаю html-страницу.
Наконец, при регистрации есть капча v2, которая выводит ошибку: «Введенный вами ответ на капчу неверен».
Я также посмотрел на этой странице: https://www.drupal.org/node/2405657
Отображение
#Регистр
ПОСТ: https://example.com/user/register?_format=json
Тип содержимого: приложение/json
{
"имя": { "значение": "fooBar" },
"почта": { "значение": "[email protected]" },
«проход»: { «значение»: «секретный соус» }
}
200 ОК
Я не получаю ответ json, он возвращает синтаксическую ошибку: неожиданный токен < в JSON в позиции 1.
выборка(URL, {
метод: «ПОСТ»,
данные: JSON.stringify({
"имя": { "значение": "fooBar" },
"почта": { "значение": "[email protected]" },
«проход»: { «значение»: «секретный соус» }
}),
тип данных: "json",
contentType: "приложение/json; charset=utf-8",
успех: функция (данные) {
console.log(данные);
successmessage = 'Данные успешно собраны';
$("#overlay_container").текст(сообщение об успехе);
},
ошибка: функция (данные) {
console.log(данные);
сообщение об успехе = 'Ошибка';
$("#overlay_container").текст(сообщение об успехе);
}
})
.тогда(ответ=>ответ.json())
.тог(json=> {
console.log(json);
}).catch(функция(ошибка) {
console.log(ошибка); // показывает указанное выше исключение
});
Ни один из успехов: или ошибка не отвечает, просто улов
Более того, когда _format=json для URL-адреса, сообщается следующая ошибка:
{сообщение: "Недопустимый формат: json"}
сообщение: "Недопустимый формат: json"
[[Прототип]]: Объект
Затем я попытался следовать этому ответу @Fons Vandamme на сообщения об установке Rest UI и настройке регистрации пользователя.
регистрация пользователя с отдыхом
сообщение: "Данные учетной записи пользователя для регистрации не получены."
[[Прототип]]: Объект
Далее: в расширении администратора изменена аутентификация с файлов cookie на базовую аутентификацию, установив базовую аутентификацию HTTP, перейдя к остальной конфигурации пользовательского интерфейса для регистрации пользователя / пользователя / регистрации: POST, и новая ошибка — 400 Bad Request.