我正在调试客户端网站上的某些内容,这些内容包含由其他人开发的模块。它运作不正常。
我对控制器进行了简单的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调用,但它永远不会被触发。
控制器确实设置正确,因为我可以直接浏览到cartAction(),这将呈现我试图返回到Ajax调用的块(如果我回显它,它不会在这里回显)。
如果我放在Ajax调用中:
console.log(data);
它返回带有statusText的对象:“error”。
我已经尝试了我能想到的Ajax URL的每个排列,绝对的,相对的,使用index.php,没有index.php等。每次,data.responseText只是一个空字符串。
有什么想法吗?
答案 0 :(得分:1)
这终于得到了解决。该模块还有一个为Adminhtml设置的控制器,它使用相同的前缀,因此浏览到直接工作的控制器操作,但是当通过Ajax调用模板文件时,它不喜欢http到https开关。
为管理员指定了不同的名字,一切都很好。
答案 1 :(得分:0)
首先,尝试将URL更改为标准Magento URL并检查是否收到回复。至少你会知道问题是来自你的jQuery请求还是你的控制器本身。如果您可以直接在浏览器中访问控制器操作,那么您的模块就可以了。