ฉันต้องการใช้ความสามารถของ ajax ในการไม่รีเฟรชหน้าหรือเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าการลงทะเบียน สร้างโมดอลโต้ตอบการเข้าสู่ระบบ / ลงทะเบียนแล้ว ฉันมี javascript ajax เข้าสู่ระบบทำงานได้อย่างสมบูรณ์โดยใช้การเรียก ajax ไปยัง api เข้าสู่ระบบโดยไม่ต้องกำหนดค่าหรือเพิ่มโมดูลใด ๆ ฉันต้องการรวมแบบฟอร์มการลงทะเบียนในลักษณะเดียวกัน ฉันต้องการลงทะเบียนเพื่อ:
- แสดงในโมดอล - ใช้งานได้
- ส่งโค้ดจาวาสคริปต์ที่ทำงานร่วมกับ PreventionDefault
- การตอบสนองล้มเหลว
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
สุดท้าย การลงทะเบียนมี captcha v2 ซึ่งแสดงผลข้อผิดพลาด: "คำตอบที่คุณป้อนสำหรับ CAPTCHA ไม่ถูกต้อง"
ฉันยังดูที่หน้านี้: https://www.drupal.org/node/2405657
แสดง
#ลงทะเบียน
โพสต์: https://example.com/user/register?_format=json
ประเภทเนื้อหา: application/json
{
"ชื่อ": { "value": "fooBar" },
"จดหมาย": { "value": "[email protected]" },
"ผ่าน": { "value": "secretSauce" }
}
200 ตกลง
ฉันไม่ได้รับการตอบกลับ json มันส่งคืนข้อผิดพลาดทางไวยากรณ์: โทเค็นที่ไม่คาดคิด < ใน JSON ที่ตำแหน่ง 1
ดึงข้อมูล (url, {
วิธีการ: 'โพสต์',
ข้อมูล: JSON.stringify({
"ชื่อ": { "value": "fooBar" },
"จดหมาย": { "value": "[email protected]" },
"ผ่าน": { "value": "secretSauce" }
}),
ประเภทข้อมูล: "json",
contentType: "application/json; charset=utf-8",
ความสำเร็จ: ฟังก์ชัน (ข้อมูล) {
console.log (ข้อมูล);
successmessage = 'บันทึกข้อมูลสำเร็จแล้ว';
$("#overlay_container").text(ข้อความสำเร็จ);
},
ข้อผิดพลาด: ฟังก์ชัน (ข้อมูล) {
console.log (ข้อมูล);
ข้อความสำเร็จ = 'ข้อผิดพลาด';
$("#overlay_container").text(ข้อความสำเร็จ);
}
})
.then(response=>response.json())
.then(json=> {
console.log(json);
}).catch(ฟังก์ชัน(ผิดพลาด) {
console.log(ผิดพลาด); // แสดงข้อยกเว้นด้านบน
});
ไม่ประสบความสำเร็จ: หรือข้อผิดพลาดตอบสนองเพียงจับ
นอกจากนี้ เมื่อ _format=json ไปยัง url จะมีการรายงานข้อผิดพลาดต่อไปนี้:
{ข้อความ: 'รูปแบบที่ยอมรับไม่ได้: json'}
ข้อความ: "รูปแบบที่ยอมรับไม่ได้: json"
[[ต้นแบบ]]: วัตถุ
ต่อไป ฉันได้ลองติดตามการตอบกลับของโพสต์นี้โดย @Fons Vandamme ในการติดตั้ง Rest UI และกำหนดค่าการลงทะเบียนผู้ใช้
การลงทะเบียนผู้ใช้กับส่วนที่เหลือ
ข้อความ: "ไม่ได้รับข้อมูลบัญชีผู้ใช้สำหรับการลงทะเบียน"
[[ต้นแบบ]]: วัตถุ
ถัดไป: ภายใต้การขยายผู้ดูแลระบบ เปลี่ยนการตรวจสอบสิทธิ์จากคุกกี้เป็นการตรวจสอบสิทธิ์ขั้นพื้นฐานโดยการติดตั้งการตรวจสอบสิทธิ์พื้นฐาน HTTP ไปที่การกำหนดค่า UI ที่เหลือสำหรับการลงทะเบียนผู้ใช้ /ผู้ใช้/ลงทะเบียน: POST และข้อผิดพลาดใหม่คือคำขอไม่ถูกต้อง 400 รายการ