it-swarm-vi.com

Phương thức / cách triển khai nhanh nhất cho một cuộc gọi lại Ajax là gì?

Tôi có một bản đồ tải các điểm đánh dấu qua ajax trên nhiều sự kiện bản đồ khác nhau. Hiện tại, tôi xác định một cuộc gọi lại trang tùy chỉnh cho mục hook_menu() in json/js của tôi.

Vì trang gọi lại của tôi không trả về bất kỳ nội dung nào và chỉ in nội dung , Drupal không hiển thị toàn bộ mẫu, menu, v.v. và do đó cho phép tôi trả lại một trang với only JavaScript của tôi.

Mặc dù điều này không hoạt động, tôi tin rằng Drupal vẫn hoàn toàn bootstrapping, có nghĩa là nó đang thêm rất nhiều chi phí tôi muốn bỏ.

Tôi đã xem xét Trình xử lý gọi lại JavaScript hiệu suất cao , tự hào là "Trình xử lý gọi lại JavaScript hiệu suất cao" và nói ngắn gọn là nó cung cấp js.php khen ngợi index.php để hướng yêu cầu của bạn đến và tùy chỉnh/giới hạn/tối ưu hóa bootstrapping Drupal theo mặc định.

Thật không may, js dự án chưa có bản phát hành D7 ( kiến nghị cho một người ở đây ), dẫn chúng ta đến điểm bắt đầu ... = =

Cách nhanh nhất để thực hiện một cuộc gọi lại Ajax trong Drupal là gì?

17
electblake

Tôi xác định một cuộc gọi lại trang tùy chỉnh cho mục hook_menu() in json/js của tôi.

Đó là những gì Drupal 6 được cung cấp. Drupal 7 AJAX framework có thể làm được nhiều hơn thế. Có nó bootstraps Drupal, nhưng nó cũng cung cấp rất nhiều tính năng miễn phí. Tóm lại, bạn có thể sử dụng ajax_deliver () làm phương thức phân phối trang và gửi lệnh đến trình duyệt.

... Ajax có thể được kích hoạt bằng cách thêm các lớp vào các nút và liên kết. Bằng cách thêm lớp 'use-ajax' vào một liên kết, liên kết sẽ được tải thông qua một cuộc gọi Ajax. Khi sử dụng phương pháp này, href của liên kết có thể chứa '/ nojs /' như một phần của đường dẫn. Khi khung Ajax đưa ra yêu cầu, nó sẽ chuyển đổi nó thành '/ ajax /'. Sau đó, máy chủ có thể dễ dàng biết liệu yêu cầu này được thực hiện thông qua yêu cầu Ajax thực tế hay ở trạng thái xuống cấp và trả lời thích hợp.

Tuy nhiên, nếu bạn muốn bỏ qua khung vì lý do hiệu suất thì không có gì ngăn bạn gọi các tệp php trong mô-đun của bạn trực tiếp từ javascript. Bạn sẽ không nhận được Drupal lòng tốt nhưng bạn cũng sẽ có toàn quyền kiểm soát trang.

8
Jeremy French

Hơi muộn một chút, nhưng đặc biệt nếu bạn đang sử dụng cuộc gọi lại ajax đó để bỏ phiếu (ví dụ: kiểm tra tin nhắn mới), có một cách thay thế thú vị: Tích hợp Drupal node.js .

Thay vì bỏ phiếu, nó cho phép bạn xây dựng một hệ thống giống như sự kiện, trong đó người dùng (còn gọi là JS trên trang của họ) giữ kết nối mở với máy chủ node.js của bạn. Nếu có điều gì đó xảy ra, bạn có thể thông báo trực tiếp cho tất cả người dùng thông qua node.js.

4
Berdir

Vì bạn muốn triển khai một cuộc gọi lại Ajax trong Drupal , sử dụng mô-đun JS trông giống như một sự đánh cược tốt. Tôi chỉ xem nhanh mã, và về cơ bản đó là những gì tôi đã đề xuất (nhưng chú ý nhiều hơn đến các chi tiết). Người bảo trì là một trong những nhà phát triển hàng đầu Drupal.

Có vẻ như bạn sẽ phải sử dụng module_load_include() hoặc có lẽ là thủ công hơn include 'sites/all/modules/contrib/...'; cách tiếp cận nếu bạn cần sử dụng API từ các mô-đun khác.

Vấn đề mà bạn đang nói đến gần đây đã trở thành một chủ đề nóng. Bài phát biểu của Dries từ DrupalCon Chicago đã nói về cách Drupal 8 cần API tốt hơn để thực hiện các cuộc gọi lại và các định dạng đầu ra không phải HTML.

3
Adam DiCarlo