Điểm:0

Cập nhật trường nội dung từ gọi lại ajax

lá cờ cn

Tôi cần cập nhật trường "nội dung" chung khi tôi thay đổi một số giá trị trường đoạn văn.

Đây là hook_form_alter của tôi:

$form["body"]["#prefix"] = "<div id='body__update_real_time_seo'>";
$form["body"]["#suffix"] = "</div>";

$form["field_content_edito"]["widget"][3]["subform"]["field_paragraph_subtitle"]["widget"][0]["value"]["#ajax"] = [
    "gọi lại" => "_update_real_time_seo",
    "sự kiện" => "thay đổi",
    "trình bao bọc" => "body__update_real_time_seo",
    "phương pháp" => "thay thế",
];

Và cuộc gọi lại tùy chỉnh của tôi:

function _update_real_time_seo(&$form, FormStateInterface $form_state) {
    $form["body"]["widget"][0]["#default_value"] = "ok";
    trả về $form["body"];
}

Khi tôi thay đổi trường đoạn văn của mình, tôi nhận được thông báo "Vui lòng đợi..." nhưng không có gì xảy ra, tôi vẫn thấy giá trị "ok" cũ của mình. Đã gặp sự cố này sau vài giờ với nhiều lần sửa lỗi từ stackoverflow.

Tái bút: Khi tôi kết xuất trước "trả lại", tôi thấy giá trị mới của mình là "ok".

Hy vọng bất cứ ai có thể giúp tôi. Cảm ơn trước.

No Sssweat avatar
lá cờ ua
Thay vào đó, hãy thử với `#value`.
lá cờ cn
@NoSssweat Nó vẫn hiển thị giá trị cũ sau khi làm mới.
No Sssweat avatar
lá cờ ua
Sau khi ajax chạy, có lỗi JS nào trong bảng điều khiển của trình duyệt không?
No Sssweat avatar
lá cờ ua
Đối với mục đích gỡ lỗi, nếu bạn cố gắng thay đổi giá trị nội dung mà không có ajax, nó có hoạt động không?
lá cờ cn
@NoSssweat không có gì trong bảng điều khiển. Và vâng, nếu tôi thay đổi giá trị nội dung, sau đó lưu, tôi có thể thấy giá trị mới sau khi tải lại.
berliner avatar
lá cờ bd
@guish Không chắc đây có phải là vấn đề của bạn không, nhưng mẫu chung cho AJAX với API biểu mẫu là (1) Xây dựng mọi thứ theo phương thức xây dựng biểu mẫu (thay đổi biểu mẫu trong trường hợp của bạn), (2) chỉ sử dụng hàm gọi lại AJAX để trả về phần cụ thể của biểu mẫu sẽ được thay thế bằng bộ chọn trình bao bọc. Điều đó và `#value` thay vì `#default_value` phù hợp với tôi. Ngoài ra, bạn cũng có thể kích hoạt AjaxResponse (xem https://www.drupal.org/docs/drupal-apis/javascript-api/ajax-forms#s-example-dynamic-textfield). Trường cơ thể có khả năng được điều khiển bởi CKEditor có thể làm phức tạp thêm mọi thứ.

Đă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.