Điểm:0

Gửi biểu mẫu đăng ký động bằng vanilla Javascript ajax

lá cờ us

Tôi muốn sử dụng khả năng ajax không làm mới trang hoặc định tuyến lại người dùng đến trang đăng ký. Các phương thức đối thoại Đăng nhập / Đăng ký đã được tạo. Tôi có javascript ajax đăng nhập hoạt động hoàn hảo bằng cách sử dụng lệnh gọi ajax tới api đăng nhập mà không cần bất kỳ cấu hình hoặc mô-đun bổ sung nào. Tôi muốn tích hợp mẫu đăng ký theo cách tương tự. Tôi muốn đăng ký để:

  1. hiển thị theo phương thức - điều này hoạt động.
  2. Gửi mã javascript hoạt động với preventDefault
  3. phản hồi không thành công.

Ajax Post đang trả về '<' rõ ràng là điều này đang trả về một số html. Làm cách nào để biết cách chuyển dữ liệu trong lệnh gọi ajax và điều gì sẽ xảy ra dưới dạng phản hồi? Ví dụ của tôi dưới đây:

<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">&times;</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>

Mọi thứ đều hoạt động ngoại trừ phản hồi. Tôi không thể tìm thấy bất cứ nơi nào những gì mong đợi như một phản hồi. Hoặc nếu tôi ràng buộc dữ liệu của cây du một cách chính xác. Bất cứ ai có thể giúp tôi trong lĩnh vực này?

Thông tin đăng nhập yêu cầu csrfToken được chuyển cùng với

 tiêu đề: {
                'Loại nội dung': 'application/json',
                'X-CSRF-Token': csrfToken
              },

và "?_format=json" được thêm vào url nhưng đối với các giá trị đăng ký, tôi đang chạy một cách mù quáng. Có ai có bất kỳ thông tin về những gì để vượt qua? Phản hồi tôi nhận được là trang html.

Cuối cùng, Đăng ký có captcha v2 xuất ra lỗi: "Câu trả lời bạn đã nhập cho CAPTCHA không chính xác"

Tôi cũng đã xem trang này: https://www.drupal.org/node/2405657

Hiển thị #Đăng ký

BÀI ĐĂNG: https://example.com/user/register?_format=json
Loại nội dung: ứng dụng/json

{
  "tên": { "giá trị": "fooBar" },
  "thư": { "giá trị": "[email protected]" },
  "pass": { "value": "secretSauce" }
}
200 được

Tôi không nhận được phản hồi json, nó trả về lỗi cú pháp: mã thông báo bất ngờ < trong JSON ở vị trí 1.

tìm nạp (url, {
            phương thức: 'POST',
            dữ liệu: JSON.stringify({
  "tên": { "giá trị": "fooBar" },
  "thư": { "giá trị": "[email protected]" },
  "pass": { "value": "secretSauce" }
}),


            Kiểu dữ liệu: "json",
            contentType: "ứng dụng/json; bộ ký tự=utf-8",
            thành công: chức năng (dữ liệu) {
                console.log(dữ liệu);
                successmessage = 'Dữ liệu được chụp thành công';
                $("#overlay_container").text(successmessage);
            },
            lỗi: chức năng (dữ liệu) {
                console.log(dữ liệu);
                successmessage = 'Lỗi';
                $("#overlay_container").text(successmessage);
            }
        })
        .then(response=>response.json())
        .sau đó (json=> {
            console.log(json);
        }).catch(function(err) {
                        console.log(err); // hiển thị ngoại lệ trên
                 });

Không thành công nào: hoặc lỗi đang phản hồi, chỉ là bắt

Hơn nữa, khi _format=json vào url, lỗi sau được báo cáo:

{thông báo: 'Định dạng không được chấp nhận: json'}
thông báo: "Định dạng không được chấp nhận: json"
[[Nguyên mẫu]]: Đối tượng

Tiếp theo, tôi đã cố gắng theo dõi phản hồi bài đăng này của @Fons Vandamme về việc cài đặt Rest UI và định cấu hình đăng ký người dùng

đăng ký người dùng với phần còn lại

thông báo: "Không nhận được dữ liệu tài khoản người dùng để đăng ký."
[[Nguyên mẫu]]: Đối tượng

Tiếp theo: trong phần mở rộng của quản trị viên, đã thay đổi xác thực từ cookie thành xác thực cơ bản bằng cách cài đặt xác thực cơ bản HTTP, điều hướng đến cấu hình giao diện người dùng còn lại cho Đăng ký người dùng /user/register: POST và lỗi mới là 400 Yêu cầu không hợp lệ.

Điểm:1
lá cờ us

Để làm cho nó hoạt động, Đây là các bước được thực hiện để làm cho nó hoạt động. Theo nhiều nhận xét, hãy làm theo hướng dẫn liên kết này: https://areatype.com/blog/register-user-drupal-8-rest-api

  1. Bật Dịch vụ web RESTful, HAL, Giao diện người dùng REST, Tuần tự hóa
  2. Định cấu hình Giao diện người dùng còn lại nhấp vào 'cấu hình' trong phần mở rộng Giao diện người dùng còn lại. Kích hoạt tài nguyên 'Đăng ký người dùng' với các cài đặt sau:

       một. đường dẫn ->/người dùng/đăng ký: POST  
       b. phương pháp: ĐĂNG
       c. định dạng: hal_json, json
       d. xác thực: cookie "**LƯU Ý**: điều này có thể tránh thông tin đăng nhập cho người dùng mới..."
  1. Cài đặt tài khoản: Trong Cấu hình -> Cài đặt tài khoản "Ai có thể đăng ký tài khoản?" -> khách truy cập vô hiệu hóa "Yêu cầu xác minh email khi khách truy cập tạo tài khoản"

  2. Dịch vụ web RESTful -> Mở rộng -> Dịch vụ web RESTful -> quyền Hộp kiểm "Truy cập POST trên tài nguyên đăng ký người dùng" Cấp cho người dùng ẩn danh.

  3. Tải Postman cho chrome và thiết lập nó như sau: POST -> điểm cuối url -> http://{website-name-pointer}/user/register?_format=hal_json Ủy quyền: không có Tiêu đề: Loại nội dung:application/json x-csrf-token:OGVi9xj9vemD3BItXOWf4-3ml2maqy-2kk0gkjIRuHk ** Nhận mã thông báo x-csrf-token thông qua trình tạo mới nhận cuộc gọi ** ** http://{website}/session/token ** nó xuất mã thông báo csrf trong nội dung trả về.

nên trông như thế này:

tiêu đề: Mã thông báo X-CSRF và Loại nội dung
đăng url: http://{website-name-pointer}/user/register?_format=hal_json
thân thể:
{
"tên":[{"giá trị":"test3"}],
"mail":[{"value":"[email protected]"}],
"vượt qua":[{"giá trị":"kiểm tra"}]
}

Điều này sẽ trả về trạng thái 200 ok cùng với nội dung uid uuid, v.v. của người dùng mới đăng ký. như một phản hồi giống như nếu trang đăng ký được gửi.

GHI CHÚ nếu nó trả về trang html "tạo/đăng ký người dùng" trong nội dung phản hồi hoặc các giá trị khác, thì rất có thể đó là cài đặt trong cấu hình ui còn lại hoặc cấu hình vistor.

Nếu bạn đang nhận được trạng thái ít nhận dạng khác, thì tất cả đều không chính xác. Nếu bạn nhận được lỗi 500 thì đó có thể là sự cố xác thực và hãy chuyển từ cookie sang ủy quyền cơ bản hoặc kiểm tra kỹ cài đặt giao diện người dùng cho trình xác thực. Số 2 và 3 dường như là khu vực thử và sai.

Có vẻ như việc khắc phục sự cố khó hơn mức cần thiết và phải mất 3 ngày tìm kiếm câu trả lời trên Internet cũng như đọc rất nhiều nhật ký thay đổi mã.

Tôi đưa ra điều này để giúp bất kỳ ai gặp khó khăn tương tự làm cho quy trình hoạt động hiệu quả.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.