Nie idź z wyjściem lub umrzeć Joomla! ma dobry sposób na radzenie sobie z tymi rzeczami.
Poniższe odpowiedzi są testowane w Joomla! 2.5 & 3 (dla 1.5 może również działać).
Ogólne
Twój URL dla zadania musi wyglądać następująco:
index.php?option=com_similar&task=abc&format=raw
Ty niż stworzyć kontroler, który będzie korzystał z widoku, powiedzmy Abc , który będzie zawierał plik view.raw.html (identyczny z normalnym plikiem widoku).
Poniżej masz kod wygeneruje surową odpowiedź 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";
Uwaga: Jest to rozwiązanie użyłbym, gdybym musiał wrócić HTML (jest czystsze i następuje logikę Joomla). Aby uzyskać proste dane JSON, zobacz poniżej, jak umieścić wszystko w kontrolerze.
Jeśli się żądania Ajax do subcontroller, jak:
index.php?option=com_similar&controller=abc&format=raw
niż nazwy subcontroller (dla surowej widzenia) musi być abc.raw.php
.
Oznacza to również, że będziesz/może mieć 2 kontrolery podrzędne o nazwie Abc.
Jeśli zwrócisz JSON, może być użyteczne użycie format=json
i abc.json.php
. W Joomla 2.5. Miałem pewne problemy z działaniem tej opcji (w jakiś sposób wynik był uszkodzony), więc użyłem surowca.
Jeśli trzeba wygenerować poprawną odpowiedź JSON, sprawdź stronę docs 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ędziesz zazwyczaj umieścić ten kod w kontroler (można nazwać model, który powróci dane, które kodujesz - bardzo często spotykany scenariusz). Jeśli chcesz zrobić to dalej, możesz także utworzyć widok JSON (view.json.php), podobny do surowego przykładu.
Bezpieczeństwo
teraz, że żądanie Ajax pracuje, nie zamykaj jeszcze stronę. Czytaj poniżej.
Nie zapomnij sprawdzić dla zapytania fałszerstwa. JSession::checkToken()
przydać się tutaj. Zapoznać się z dokumentacją, w jaki sposób dodać CSRF anti-spoofing to forms
wielojęzycznych witryn
Może się zdarzyć, że jeśli nie wysyłają nazwy języka w żądaniu, Joomla nie przełoży sznurki język, którego chcesz .
Zastanów się nad dołączeniem w jakiś sposób param do swojej prośby (np. &lang=de
).
Nowości w Joomla 3.2! - Joomla! Ajax Interface
Joomla teraz zapewnia lekki sposób obsługi żądania Ajax w wtyczce lub module. Możesz użyć Joomla! Interfejs Ajax, jeśli nie masz już komponentu lub jeśli chcesz wysyłać żądania z modułu, który już posiadasz.
Co masz na myśli mówiąc "bez drukowania całej strony"? Nie drukować niczego? Ponadto, nie pokazujesz kompletnego zapytania ajax, powinno się kończyć przez}); . –
spójrz na zrzut ekranu. nie napisałem pełnego ajax, ponieważ nie sądzę, że to jest tutaj ważne – Jonuux
Nie widzę, jakie jest oczekiwane wyjście? Czy w ogóle powinno się coś stać? –