Tại sao die () được sử dụng ở cuối hàm xử lý yêu cầu Ajax?


9

Đ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:


17

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.


Cảm ơn bạn đã trả lời. Một chút nhầm lẫn với đầu ra thêm..nếu không có dữ liệu nhận được từ yêu cầu, làm thế nào đầu ra thêm được tạo ra? Nó cũng sẽ thêm tài nguyên máy chủ?
Biệt thự Leditesh VM

bởi vì wordpress tiếp tục chạy và sẽ cố gắng xử lý url. Nếu việc thực thi sẽ kích hoạt các plugin không kiểm tra chính xác bối cảnh mà mã của chúng đang được chạy, bạn có thể nhận được đầu ra (rất có thể là một lỗi php nếu chúng chỉ được gọi trong ngữ cảnh khác)
Đánh dấu Kaplun

1
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, dievề cơ bản là bắt buộc, ngay cả khi trình bao bọc wp_dienên được ưu tiên vì một hàm chứa diekhá nhiều không thể kiểm tra.
gmazzap

tnx @gmazzap, đã lâu rồi kể từ khi tôi xem chi tiết về mã đó
Mark Kaplun

Đáng lưu ý rằng wp_die cũng có thể được nối bởi các plugin khác (thông qua wp_die_ajax_handler). Không ai muốn sử dụng die hoặc exit, nhưng nếu bạn xuất bản một plugin thì có nguy cơ xảy ra xung đột nếu bạn không. Tôi thậm chí còn xử lý bộ đệm đầu ra của riêng mình do các chủ đề và plugin tạo ra thực thi giữa đầu ra rác.
Tim

0

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.


3
Xin chào Andy, và chào mừng bạn đến đây! Về câu trả lời của bạn, cách tốt nhất của WP đối với AJAX là sử dụng admin-ajax.php làm kết quả của yêu cầu và tệp đó luôn luôn thêm đầu ra nếu không dừng lại (xem github.com/WordPress/WordPress/blob/master/wp -quản trị viên/… ) Vì vậy, nếu bạn xuất một số JSON từ một cuộc gọi lại và không gọi 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 ...
gmazzap

@gmazzap có khi tôi làm việc với ajax tôi nhận thấy "0" được thêm vào nếu không sử dụng wp_die
Leditesh VM Villa

"khủng khiếp" không phải là một mô tả rất hữu ích. có nhiều điều khủng khiếp trong bất kỳ mã nào đã tồn tại hơn một thời gian rất nhỏ. Không có mã nào là hoàn hảo. Nếu bạn chỉ sử dụng mã hoàn hảo, bạn sẽ phải tự viết mọi thứ bắt đầu bằng mã micro CPU
Mark Kaplun

Tôi đang cố gắng giáo dục mọi người bằng cách trả lời chính xác câu hỏi. Việc sử dụng 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.
Andy

Vâng, bất kỳ phần mềm và nền tảng đều có nhược điểm của nó. Không có giải pháp, chỉ có sự thỏa hiệp.
Jesús Franco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.