Vreau să folosesc capacitatea ajax de a nu reîmprospăta pagina sau de a redirecționa utilizatorul către pagina de înregistrare. Au fost create modale de dialog Autentificare/Înregistrare. Am ajax-ul javascript de conectare care funcționează perfect folosind un apel ajax la API-ul de conectare fără configurații sau module adăugate. Doresc să integrez formularul de înregistrare în același mod. As dori ca inregistrarea sa:
- arată într-un mod - aceasta funcționează.
- Trimiteți codul javascript funcționează cu preventDefault
- răspunsul eșuează.
Ajax Post returnează „<” în mod evident, acesta returnează niște html. Cum știu cum să transmit datele în apelul ajax și la ce să mă aștept ca răspuns?
Exemplul meu de mai jos:
<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>
Totul funcționează, cu excepția răspunsului. Nu găsesc nicăieri la ce să mă aștept ca răspuns. Sau dacă leagă corect datele ulmilor. Ma poate ajuta cineva in acest domeniu?
Conectarea a necesitat un csrfToken pentru a fi transmis împreună cu
antete: {
„Content-Type”: „application/json”,
„X-CSRF-Token”: csrfToken
},
și „?_format=json” atașat la adresa URL, dar pentru valorile de înregistrare rulez orbește. Are cineva informatii despre ce sa treaca? Răspunsul pe care îl primesc este pagina html.
În cele din urmă, înregistrarea are un captcha v2 care afișează eroarea: „Răspunsul pe care l-ați introdus pentru CAPTCHA nu a fost corect”
M-am uitat si pe aceasta pagina: https://www.drupal.org/node/2405657
Arătând
#Inregistreaza-te
POST: https://example.com/user/register?_format=json
Tip de conținut: aplicație/json
{
"nume": { "valoare": "fooBar" },
"mail": { "value": "[email protected]" },
"trece": { "valoare": "secretSauce" }
}
200 OK
Nu primesc un răspuns json, returnează eroarea de sintaxă: token neașteptat < în JSON la poziția 1.
prelua(url, {
metoda: 'POST',
date: JSON.stringify({
"nume": { "valoare": "fooBar" },
"mail": { "value": "[email protected]" },
"trece": { "valoare": "secretSauce" }
}),
dataType: „json”,
contentType: „application/json; charset=utf-8”,
succes: function(data) {
console.log(date);
successmessage = 'Datele au fost capturate cu succes';
$("#overlay_container").text(successmessage);
},
eroare: function(data) {
console.log(date);
successmessage = 'Eroare';
$("#overlay_container").text(successmessage);
}
})
.then(response=>response.json())
.then(json => {
console.log(json);
}).catch(function(err) {
console.log(err); // arată excepția de mai sus
});
Niciunul dintre succesul: sau eroarea nu răspunde, doar prinderea
Mai mult, atunci când _format=json la adresa URL, este raportată următoarea eroare:
{mesaj: „Format inacceptabil: json”}
mesaj: „Format inacceptabil: json”
[[Prototip]]: obiect
Apoi, am încercat să urmăresc răspunsul la această postare de la @Fons Vandamme despre instalarea Rest UI și configurarea înregistrării utilizatorului
înregistrarea utilizatorului cu rest
mesaj: „Nu s-au primit date privind contul de utilizator pentru înregistrare.”
[[Prototip]]: obiect
În continuare: sub admin extinde, a schimbat autentificarea de la cookie-uri la autentificare de bază prin instalarea autentificarea de bază HTTP, navigând la restul configurației UI pentru Înregistrarea utilizatorului /utilizator/registrare: POST și noua eroare este o cerere 400 Bad Request.