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 调用,但它永远不会被触发。

控制器确实设置正确,因为我可以直接浏览到 cartAction(),这将呈现我试图返回到 Ajax 调用的块(如果我回显它,它不会在这里回显)。

如果我放置在 Ajax 调用中:

console.log(data);

它返回带有状态文本的对象:“错误”。

我已经尝试了我能想到的 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 回答