我目前正在開發一個Magento擴展,其主要組件是前端部件和後端管理選項面板。我沒有前端控制器,但我有一個adminhtml
控制器,給我一些麻煩。這裏是我的控制器中的一些代碼。Magento adminhtml AJAX查詢返回302狀態
文件:/app/code/community/Mynamespace/Myextension/controllers/Adminhtml/MybackendController.php
class Mynamespace_Myextension_Adminhtml_MybackendController
extends Mage_adminhtml_Controller_Action
{
protected function normalAction() {
}
protected function ajaxAction() {
die('got here');
}
}
normalAction
是通過鏈接,如http://mystore.com/index.php/admin/mybackend/normal/key/.../
導航稱爲操作。有一些類似的操作,例如index
,save
,edit
,grid
等。我的控制器的入口點是一個菜單項,導致index
操作。所有這些行動都按預期工作。
ajaxAction
是僅通過AJAX POST查詢調用的操作。
問題是,無論何時我嘗試這樣做,我都會收到一個302 HTTP狀態碼回覆,該回復重定向到管理儀表板(admin/index/index
)。如果我嘗試通過在瀏覽器中輸入鏈接來直接訪問此操作,我仍然會得到一個302.如果我爲此操作添加菜單條目,那麼它按預期方式工作,並看到「到達此處」文本。
的JavaScript/jQuery的代碼,不會AJAX請求並不複雜:
$.post(
'http://mystore.com/index.php/admin/mybackend/ajax/key/.../',
somePostDataObject,
function() {
alert('success');
}
);
注意,成功函數被調用,即使狀態代碼爲302
我試着調試路由機制瞭解究竟是什麼導致它重定向。到目前爲止,我已經推斷在Mage_Core_Controller_Varien_Action
類的preDispatch
方法中發生了問題。模塊,控制器和操作已成功解決,並且將請求標記爲已分派(_dispatched
屬性爲true),直到調度controller_action_predispatch
事件。事件解決後,請求顯示爲未被分派(_dispatched
變爲false)。據推測,偵聽此事件的其中一個對象會對請求進行一些進一步處理並拒絕它。我還沒有能夠比這更深入地進行調試。
通常我會發布一些代碼,以幫助您更好地理解發生了什麼,但是需要從各種配置文件和類複製很多行,所以我會在人們寫評論或回答時提問查看特定文件。到目前爲止,我相信配置是正確的,因爲除AJAX請求之外的所有其他功能都可以正常工作。
你應該正在使用HTTPS? – 2013-05-01 14:50:49
我根本沒有使用HTTPS(既不在前端也不在後端)。 – Grampa 2013-05-01 15:23:33