不要去退出或死亡是,Joomla!有處理這些東西的好方法。
下面的答案在Joomla! 2.5 & 3(對於1.5也可以工作)。
一般
你URL的任務需要看起來像這樣:
index.php?option=com_similar&task=abc&format=raw
你不是創建將使用視圖控制器,假設某,其中將包含文件view.raw.html(與普通視圖文件相同)。
下面你有生成原始的HTML響應代碼:
/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";
注:這是解決辦法,如果我不得不返回HTML(這是更清潔和遵循的Joomla邏輯)我會使用。要返回簡單的JSON數據,請參閱下面的介紹如何將所有內容放入控制器。
如果你讓你的Ajax請求的子控制器,如:
index.php?option=com_similar&controller=abc&format=raw
比你的子控制器名稱(原始視圖)需要abc.raw.php
。
這也意味着您將/可能會有2個名爲Abc的子控制器。
如果返回JSON,它可能是有意義的使用format=json
和abc.json.php
。在Joomla 2.5。我有一些問題得到這個選項的工作(不知何故輸出已損壞),所以我用原始。
如果您需要生成有效的JSON響應,檢查出的文檔頁面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);
您通常會將此代碼放在控制器(你會調用一個模型,將返回您編碼的數據 - 一種非常常見的情況)。如果您需要進一步研究,還可以創建JSON視圖(view.json.php),與原始示例類似。
安全
現在Ajax請求正在工作,請不要關閉該頁面還沒有。參見下文。
不要忘記檢查請求僞造。 JSession::checkToken()
在這裏派上用場。閱讀關於如何添加CSRF anti-spoofing to forms
多語種網站文檔
它可能發生,如果你沒有在發送請求的語言的名稱是,Joomla不會翻譯所需的語言字符串。
考慮以某種方式將lang param附加到您的請求中(如&lang=de
)。
Joomla 3.2中的新功能! - Joomla! Ajax Interface
Joomla現在提供了一種輕量級的方式來處理插件或模塊中的Ajax請求。你可能想要使用Joomla! Ajax接口,如果您沒有組件,或者您需要從您已有的模塊發出請求。
你是什麼意思「沒有打印整個頁面」?要不打印任何東西?另外,你不會顯示完整的Ajax請求,它應該以})結束; 。 –
看截圖。我沒有寫完整的Ajax,因爲我不認爲這很重要 – Jonuux
我沒有看到預期的輸出是什麼?應該發生什麼? –