Ajaxコールが機能していません
-
16-10-2019 - |
質問
私はajax呼び出しを介して.phtmlに電話しようとしています、そして私は従いました これ Stackoverflowの例ですが、私はいくつかの側面を見逃しているか、それを間違っているだけです。 Ajaxが実行されると、404が取得され、ブラウザを介して直接表示しようとしましたが、見つかりませんでした。これに基づいて、私が設定したファイル構造のいくつかの側面が間違っていると仮定しますが、正確に何を理解することはできません。
私はローカル/checkoutajax/controllers/ajaxcontroller.phpにコントローラーを持っています
<?php
class Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$this->loadLayout();
$this->renderLayout();
}
}
local/checkoutajax/etc/config.xml
<?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>
私はこれを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>
そして最後に、mytemplate/default/template/checkoutajax/index.phtmlにあります
<?php
echo 'this is a test'
最後に、これは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';
}
});
すべてのヘルプが大歓迎です。
解決
いくつかのトラブルシューティングのヒント:
アプリ/etc/モジュールに登録されているモジュールはありますか?
そうでない場合は、そうする必要があります:
<?xml version="1.0"?>
<config>
<modules>
<ThomasRyan_Checkoutajax>
<active>true</active>
<codePool>local</codePool>
</ThomasRyan_Checkoutajax>
</modules>
</config>
このモジュールのネーミングは間違っているように見えます - 名前空間を示すアンダースコアで分離されることが期待されています - したがって、これではありません。
<module>Checkoutajax</module>
すべてのモジュールにはasです Company_Module
, など。Checkoutajax_ajaxcontrollerは、有効なクラス名ではありません。一般的なPHPエラーログ(またはApacheログ)を確認すると、 class not exists
.
これを変更/更新します ThomasRyan_Checkoutajax
または類似。 Checkoutajaxのすべてのインスタンスは、モジュールXML定義で更新する必要があります。
フロントネームには問題もあります。つまり、小文字である必要があります。
<frontName>Checkoutajax</frontName>
MagentoがRurteNameで小文字を強制するかどうかはわかりません。
更新されたコード、次のコード:
<?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>
とコントローラー:
<?php
class ThomasRyan_Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$this->loadLayout();
$this->renderLayout();
}
}
編集:
これは、Magentoでルート/コントローラー/アクションがどのように機能するかを説明するための簡単な更新です。これがあなたのURLであるとしましょう:
www.yourstore.com/checkoutajax/ajax/index
これは、3つの異なるエンティティを表します。
checkoutajax
ルート名は呼ばれますfrontName
モジュール定義XMLajax
ここで、コントローラー名を表します。このコントローラーファイルは、ajaxcontroller.phpという名前で、/controllers
モジュールのディレクトリ。index
を表しますindexAction
方法。
だから、視覚化するには:
www.yourstore.com/checkoutajax/ajax/index
---------route--------^
---------controller-------------^
---------action-----------------------^
他のヒント
ファイル名にタイプミスがあります。コントローラーファイルには、local/checkoutajax/controllers/ajaxcontroller.phpという名前である必要があります(sなし)