0

他の誰かによって開発されたモジュールを持つクライアントのサイトでいくつかのものをデバッグしています。正しく動作していません。

コントローラーへの単純な Ajax 呼び出しがあります。

jQuery.ajax({
    url : "http://www.site.com/quickview/index/cart",
    complete : function(data){
                    // data.responseText is empty here.
                    jQuery('span.topLinks').replaceWith(data.responseText);
                    // This returns the data object with statusText = "error"
                    console.log(data);
    }
})

コントローラーで単純なアクションを呼び出します。

    public function cartAction()
    {
        // This log call never fires
        Mage::log('foobar',null,'temp.log');
        $this->loadLayout();
        $Top = $this->getLayout()->getBlock('top.links')->toHtml();
        $this->getResponse()->setBody($Top);
    }

問題は、Ajax 呼び出しがコントローラーに到達しないことです。cartAction() 内に Mage::log 呼び出しを配置し​​ましたが、起動されません。

Ajax 呼び出しに戻ろうとしているブロックをレンダリングする cartAction() を直接参照できるため、コントローラーは実際に適切に設定されています (エコーしても、ここではエコーされません)。

Ajax 呼び出し内に配置すると、次のようになります。

console.log(data);

statusText: "error" のオブジェクトを返します。

私は考えられる Ajax URL のすべての順列、絶対、相対、index.php を使用する、index.php を使用しないなどを試しました。毎回、data.responseText は単なる空の文字列です。

何かご意見は?

4

2 に答える 2

1

これは最終的に解決されました。このモジュールには、同じフロントネームを使用する Adminhtml 用のコントローラーも設定されていたため、コントローラー アクションへの参照は直接機能しましたが、Ajax を介してテンプレート ファイルを介して呼び出された場合、http から https への切り替えが気に入りませんでした。

管理コントローラーに別のフロントネームを割り当てても問題ありません。

于 2012-08-06T16:05:45.620 に答える
0

まず、URL を標準の Magento URL に変更してみて、応答があるかどうかを確認します。少なくとも、問題が jQuery リクエストに起因するのか、コントローラー自体に起因するのかはわかります。ブラウザーでコントローラー アクションに直接アクセスできる場合、モジュールは問題ありません。

于 2012-08-04T10:36:47.257 に答える