Đừng đi với exit or die, Joomla! có cách xử lý tốt với công cụ này.
Các câu trả lời dưới đây được kiểm tra trong Joomla! 2.5 & 3 (đối với 1.5. Cũng có thể hoạt động).
chung
URL của bạn cho nhiệm vụ cần phải trông như thế này:
index.php?option=com_similar&task=abc&format=raw
Bạn hơn tạo ra bộ điều khiển mà sẽ sử dụng xem, giả sử Abc , sẽ chứa tệp view.raw.html (giống với tệp xem bình thường).
Dưới đây bạn có mã cho tạo ra một phản ứng HTML liệu:
/controller.php
public function abc()
{
// Set view
JRequest::setVar('view', 'Abc');
parent::display();
}
/views/abc/view.raw.php
<?php
defined('_JEXEC') or die;
jimport('joomla.application.component.view');
class SimilarViewAbc extends JView
{
function display($tpl = null)
{
parent::display($tpl);
}
}
/views/abc/tmpl/default.php
<?php
echo "Hello World from /views/abc/tmpl/default.php";
Lưu ý: Đây là giải pháp tôi sẽ sử dụng nếu tôi phải trả lại HTML (nó sạch hơn và tuân theo logic Joomla). Để trả về dữ liệu JSON đơn giản, hãy xem bên dưới cách đặt mọi thứ trong bộ điều khiển.
Nếu bạn thực hiện yêu cầu Ajax của bạn đến một subcontroller, như:
index.php?option=com_similar&controller=abc&format=raw
Thần tên subcontroller của bạn (cho xem liệu) cần phải được abc.raw.php
.
Điều này cũng có nghĩa là bạn sẽ/có thể có 2 điều khoản con có tên là Abc.
Nếu bạn trả về JSON, bạn có thể sử dụng format=json
và abc.json.php
. Trong Joomla 2.5. Tôi đã có một số vấn đề nhận được tùy chọn này để làm việc (bằng cách nào đó đầu ra đã bị hỏng), vì vậy tôi sử dụng nguyên.
Nếu bạn cần tạo ra một JSON phản ứng hợp lệ, hãy kiểm tra các trang tài liệu Generating JSON output
// We assume that the whatver you do was a success.
$response = array("success" => true);
// You can also return something like:
$response = array("success" => false, "error"=> "Could not find ...");
// Get the document object.
$document = JFactory::getDocument();
// Set the MIME type for JSON output.
$document->setMimeEncoding('application/json');
// Change the suggested filename.
JResponse::setHeader('Content-Disposition','attachment;filename="result.json"');
echo json_encode($response);
Bạn thường sẽ đặt mã này trong bộ điều khiển (bạn sẽ gọi cho một mô hình mà sẽ trở lại dữ liệu bạn mã hóa - một tình huống rất phổ biến). Nếu bạn cần tiếp tục, bạn cũng có thể tạo một khung nhìn JSON (view.json.php), tương tự như ví dụ thô.
an
Bây giờ yêu cầu Ajax đang làm việc, không đóng trang được nêu ra. Đọc dưới đây.
Đừng quên kiểm tra mật khẩu yêu cầu. JSession::checkToken()
có ích ở đây. Đọc tài liệu trên Làm thế nào để thêm CSRF anti-spoofing to forms
trang web đa ngôn ngữ
Có thể xảy ra nếu bạn không gửi tên ngôn ngữ trong yêu cầu, Joomla sẽ không dịch các chuỗi ngôn ngữ bạn muốn .
Cân nhắc việc thêm tham số lang theo yêu cầu của bạn bằng cách nào đó (như &lang=de
).
Mới trong Joomla 3.2! - Joomla! Ajax Interface
Joomla hiện cung cấp một cách nhẹ để xử lý yêu cầu Ajax trong plugin hoặc mô-đun. Bạn có thể muốn sử dụng Joomla! Giao diện Ajax nếu bạn chưa có một thành phần hoặc nếu bạn cần thực hiện các yêu cầu từ một mô-đun mà bạn đã có.
Bạn có ý nghĩa gì với "không in toàn bộ trang"? Để không in bất cứ thứ gì? Ngoài ra, bạn không hiển thị yêu cầu ajax hoàn chỉnh của bạn, nó sẽ kết thúc bằng}); . –
xem ảnh chụp màn hình. tôi đã không viết ajax đầy đủ, bởi vì tôi không nghĩ rằng đây là quan trọng ở đây – Jonuux
Tôi không thấy những gì đầu ra dự kiến là? Nên anyting xảy ra ở tất cả? –