質問

私は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 モジュール定義XML
  • ajax ここで、コントローラー名を表します。このコントローラーファイルは、ajaxcontroller.phpという名前で、 /controllers モジュールのディレクトリ。
  • index を表します indexAction 方法。

だから、視覚化するには:

www.yourstore.com/checkoutajax/ajax/index
---------route--------^
---------controller-------------^
---------action-----------------------^

他のヒント

ファイル名にタイプミスがあります。コントローラーファイルには、local/checkoutajax/controllers/ajaxcontroller.phpという名前である必要があります(sなし)

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top