Ajax -Anruf funktioniert nicht
-
16-10-2019 - |
Frage
Ich versuche, eine .phtml über einen Ajax -Anruf anzurufen, und ich folgte ich Dies Beispiel zum Stackoverflow, aber mir fehlt entweder einen Aspekt oder mache es einfach falsch. Wenn der Ajax läuft, wird ein 404 und ich habe versucht, ihn direkt durch den Browser anzusehen, und es konnte es nicht finden. Basierend darauf nehme ich an, dass ein Aspekt der Dateistruktur, die ich eingerichtet habe, falsch ist, aber ich kann nicht genau herausfinden, was genau.
Ich habe Controller unter lokal/checkoutajax/controller/ajaxcontroller.php
<?php
class Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$this->loadLayout();
$this->renderLayout();
}
}
In lokal/checkoutajax/etc/config.xml habe ich die folgenden
<?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>
Ich habe das 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>
Und schließlich habe ich in myTemplate/default/template/checkoutajax/index.phtml
<?php
echo 'this is a test'
Schließlich ist dies der Ajax -Anruf
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';
}
});
Alle Hilfe wird sehr geschätzt.
Lösung
Einige Tipps zur Fehlerbehebung:
Haben Sie ein Modul in App/etc/Modulen registriert?
Wenn nicht, sollte es als solches sein:
<?xml version="1.0"?>
<config>
<modules>
<ThomasRyan_Checkoutajax>
<active>true</active>
<codePool>local</codePool>
</ThomasRyan_Checkoutajax>
</modules>
</config>
Dieses Modulbenennungsnamen sieht falsch aus - es wird erwartet, dass es mit einem Unterstrich getrennt wird, der den Namespace angibt - also nicht Folgendes:
<module>Checkoutajax</module>
Alle Module werden als als benannt Company_Module
, usw. Checkoutajax_AjaxController ist dann kein gültiger Klassenname. Überprüfen Sie Ihr allgemeines PHP -Fehlerprotokoll (oder Apache -Protokolle) und Sie sollten etwas sehen, das sich auswirkte class not exists
.
Ändern/aktualisieren Sie dies zu ThomasRyan_Checkoutajax
oder ähnliches. Alle Instanzen von Checkoutajax müssen in der Modul XML -Definition aktualisiert werden.
Der Frontname hat auch Probleme, nämlich, es sollte Kleinbuchstaben sein:
<frontName>Checkoutajax</frontName>
Ich bin mir nicht sicher, ob Magento den Kleinbuchstaben auf dem RoutName zwingt.
Der aktualisierte Code dann:
<?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>
Und der Controller:
<?php
class ThomasRyan_Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$this->loadLayout();
$this->renderLayout();
}
}
Bearbeiten:
Dies ist nur ein kurzes Update, um zu erklären, wie Routen/Controller/Aktionen in Magento funktionieren. Nehmen wir an, dies ist Ihre URL:
www.yourstore.com/checkoutajax/ajax/index
Dies repräsentiert drei verschiedene Einheiten:
checkoutajax
ist der Routename, auch genanntfrontName
in der Moduldefinition xmlajax
Hier repräsentiert der Controller -Name. Diese Controller -Datei sollte ajaxcontroller.php genannt werden und sich in der befindet/controllers
Verzeichnis Ihres Moduls.index
repräsentiert dieindexAction
Methode.
Also, um sich zu visualisieren:
www.yourstore.com/checkoutajax/ajax/index
---------route--------^
---------controller-------------^
---------action-----------------------^
Andere Tipps
Sie haben einen Tippfehler in Ihrem Dateinamen. Die Controller -Datei sollte als lokal/checkoutajax/controller/ajaxcontroller.php (ohne s) ausgezeichnet werden.