Điều gì có thể sai nếu tôi không sử dụng die();
sau hàm xử lý yêu cầu Ajax?
Tôi đã nhận thấy rằng hầu như tất cả các mã dựa trên Ajax Ajax đang sử dụng nó.
Điều gì có thể sai nếu tôi không sử dụng die();
sau hàm xử lý yêu cầu Ajax?
Tôi đã nhận thấy rằng hầu như tất cả các mã dựa trên Ajax Ajax đang sử dụng nó.
Câu trả lời:
Nếu bạn không làm như vậy die
, việc thực thi sẽ tiếp tục và có thể tạo thêm đầu ra có thể phá vỡ bất kỳ thông tin nào bạn đang cố gắng gửi từ máy chủ đến trình duyệt. Nói đúng ra, bạn có thể không cần die
, nhưng có rất ít điểm trong việc chấp nhận rủi ro.
Nói một cách tổng quát hơn, WordPress Ajax cho thấy tuổi của nó và thiếu kinh nghiệm làm việc với Ajax khi nó được thiết kế. Thay vào đó, bạn nên sử dụng các tuyến WordPress JSON, vì chúng có thể có cấu trúc URL tốt hơn và cấu trúc lập trình hợp lý và mô đun hơn.
admin-ajax.php
luôn luôn thêm đầu ra nếu yêu cầu không được dừng lại. Vì vậy, trừ khi người gọi của AJAX bỏ qua đầu ra, die
về cơ bản là bắt buộc, ngay cả khi trình bao bọc wp_die
nên được ưu tiên vì một hàm chứa die
khá nhiều không thể kiểm tra.
WordPress không nên yêu cầu điều này và nó cho thấy thực tiễn mã hóa kém.
Khi bạn thực hiện một yêu cầu Ajax, URL được yêu cầu sẽ tạo ra phản hồi với dữ liệu được yêu cầu (và cũng đặt các tiêu đề chính xác để nói loại dữ liệu đó là gì, ví dụ JSON). Không có gì khác phải được cung cấp trong phản hồi ngoại trừ đầu ra cần thiết.
Tôi làm việc với PHP và JavaScript mọi lúc - mặc dù không phải là nhà phát triển WordPress - và đã thích thú với tiêu đề của câu hỏi này. Nếu đó là những gì WordPress làm, điều đó thật tồi tệ. Như đã nêu trong câu trả lời được chấp nhận, nó có khả năng là một cách để ngăn chặn bất kỳ đầu ra nào nữa được đưa vào phản hồi. Nhưng tất nhiên, "đầu ra xa hơn" không bao giờ nên là một phần của phản ứng bắt đầu.
die
(hoặc trình bao bọc wp_die
), WP sẽ thêm một "0"
JSON sẽ phá vỡ JSON, ngăn chặn phân tích cú pháp chính xác từ người gọi (có thể là js). Vì vậy, vâng, tôi đồng ý rằng trong một ứng dụng được phát triển tốt, người ta không cần phải chết; mặt khác, trong WordPress ...
die()
là không bắt buộc và sẽ không bao giờ có trong một ứng dụng PHP được viết tốt. Sự tương tự của mã CPU là không liên quan và cho thấy sự thiếu hiểu biết hoàn toàn. Có thể định nghĩa của bạn về "khủng khiếp" và của tôi là khác nhau. Tôi không sử dụng WP vì nó vô nghĩa như thế này. Tôi viết mã (đúng) trong PHP mọi lúc và đang cố gắng giúp đỡ từ góc độ PHP. Bạn có thể chấp nhận rằng WP đã có được điều này - và nhiều thứ khác - hoàn toàn sai. Vì đây là một ngăn xếp WP, tôi đoán những người hâm mộ của nó có một thời gian khó khăn với điều này.