Ajax chiamata non funziona
-
16-10-2019 - |
Domanda
Sto cercando di chiamare un .phtml tramite una chiamata AJAX e ho seguito questo esempio su StackOverflow ma sto mancante qualche aspetto o semplicemente facendo male. Quando l'ajax gestisce ottiene un 404 e ho provato a vederlo direttamente tramite il browser e non poteva trovarlo. Sulla base di questo presumo qualche aspetto della struttura dei file che ho creato è sbagliato, ma io non riesco a capire che cosa esattamente.
Ho controller che si trova in / CheckoutAjax / controllori locali / AjaxController.php
<?php
class Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$this->loadLayout();
$this->renderLayout();
}
}
Nel locale / CheckoutAjax / etc / config.xml Ho il seguente
<?xml version="1.0"?>
<config>
<modules>
<Checkoutajax>
<version>0.1.0</version>
</Checkoutajax>
</modules>
<frontend>
<routers>
<Checkoutajax>
<use>standard</use>
<args>
<module>Checkoutajax</module>
<frontName>Checkoutajax</frontName>
</args>
</Checkoutajax>
</routers>
<layout>
<updates>
<checkoutajax>
<file>checkoutajax.xml</file>
</checkoutajax>
</updates>
</layout>
</frontend>
</config>
Ho questo in mytemplate / default / layout / checkoutajax.xml
<?xml version="1.0"?>
<layout>
<checkoutajax_ajax_index>
<block type="checkout/checkoutajax" name="root" output="toHtml" template="checkoutajax/index.phtml" />
</checkoutajax_ajax_index>
</layout>
e infine ho in mytemplate / default / template / checkoutajax / index.phtml
<?php
echo 'this is a test'
Infine, questa è la chiamata AJAX
JQuery.ajax({
url: "/checkoutajax/ajax/index",
type: "POST",
data: data,
success: function(data) {
$j('#results').html(data);
document.getElementsByClassName('minicart-content')[0].style.display = 'block';
}
});
Ogni aiuto è molto apprezzato.
Soluzione
Alcuni suggerimenti per la risoluzione:
Avete un modulo registrato in app / etc / modules?
In caso contrario, dovrebbe essere come tale:
<?xml version="1.0"?>
<config>
<modules>
<ThomasRyan_Checkoutajax>
<active>true</active>
<codePool>local</codePool>
</ThomasRyan_Checkoutajax>
</modules>
</config>
Questa denominazione del modulo sembra errato - ci si aspetta di essere separati da un trattino che indica spazio dei nomi - così, non in questo modo:
<module>Checkoutajax</module>
Tutti i moduli sono chiamato come Company_Module
, ecc Checkoutajax_AjaxController non è poi un nome di classe valido. Controlla il tuo generale log degli errori di PHP (o log di Apache) e si dovrebbe vedere qualcosa per l'effetto di class not exists
.
Cambia / aggiornare questo per ThomasRyan_Checkoutajax
o simili. dovranno essere aggiornati nella definizione del modulo XML tutte le istanze di Checkoutajax.
Il frontName ha anche problemi, vale a dire, dovrebbe essere in minuscolo:
<frontName>Checkoutajax</frontName>
Non sono sicuro se Magento forza la minuscola sul routename.
Il codice aggiornato, quindi:
<?xml version="1.0"?>
<config>
<modules>
<ThomasRyan_Checkoutajax>
<version>0.1.0</version>
</ThomasRyan_Checkoutajax>
</modules>
<frontend>
<routers>
<Checkoutajax>
<use>standard</use>
<args>
<module>ThomasRyan_Checkoutajax</module>
<frontName>checkoutajax</frontName>
</args>
</Checkoutajax>
</routers>
<layout>
<updates>
<checkoutajax>
<file>checkoutajax.xml</file>
</checkoutajax>
</updates>
</layout>
</frontend>
</config>
E il controllore:
<?php
class ThomasRyan_Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$this->loadLayout();
$this->renderLayout();
}
}
Modifica
Questa è solo un rapido aggiornamento per spiegare come percorsi / controllori / azioni lavorano in Magento. diciamo di lasciare che questo è il vostro URL:
www.yourstore.com/checkoutajax/ajax/index
Questo rappresenta tre diverse entità:
-
checkoutajax
è il nome del percorso, chiamato anchefrontName
nella definizione del modulo XML -
ajax
qui rappresenta il nome del controller. Questo file di controllo deve essere denominato AjaxController.php e si trova nella directory/controllers
del modulo. -
index
rappresenta il metodoindexAction
.
Quindi, di visualizzare:
www.yourstore.com/checkoutajax/ajax/index
---------route--------^
---------controller-------------^
---------action-----------------------^
Altri suggerimenti
Hai un errore di battitura nel nome del file. file di controller dovrebbe essere nominato / CheckoutAjax / controllori locali / AjaxController.php (senza s)