magento ajax无法正常工作

时间:2014-02-05 15:47:19

标签: php jquery ajax magento

我的控制器中有这个功能:

public function saveLeadDaysAction(){
        echo "works";
    }

在模板phtml中我试图这样做:

jq("#prodcal_leaddays").on("blur", function(e){
        $saveurl="<?=$this->getUrl('prodcal/adminhtml_prodcaltab/saveLeadDays');?>";
        console.log('$saveurl');
        jq.post($saveurl,{'id':'test'},function(d){
            console.log(d);
        });
    });

网址似乎返回整个管理信息中心页面,而不是预期的works文字。但是,如果我直接在浏览器中打开网址,它会显示预期的文字。

我做错了什么?

哦,我尝试在网址的末尾附加?isAjax=true,返回:

{"error":true,"message":"Invalid Form Key. Please refresh the page."}

编辑:只是为了澄清: - getUrl在控制台中生成类似http://localhost/devmagento/index.php/prodcal/adminhtml_prodcaltab/saveLeadDays‌​/key/d3c92257c664d8d207f5a0bdeb3edebf/的网址。 如果我从控制台复制此URL并将其粘贴到浏览器中,它会按预期工作,我会收到works文本。 但是当与jQuery帖子一起使用时,它会失败并重定向到仪表板。

编辑2:对于帖子数据来说,关键是错误的,如果我更改上面的内容以使用GET,并将值放在getUrl函数中,它运行正常,但问题是因为这是由ajax完成的,我需要使用javascript动态更改值。

我为得到的事情所做的是:

jq("#prodcal_leaddays").on("blur", function(e){
        $saveurl="<?=$this->getUrl('prodcal/adminhtml_prodcaltab/saveLeadDays',array('id'=>'test'));?>";
        console.log($saveurl);
        jq.get($saveurl,function(d){
            console.log(d);
        });
    });

2 个答案:

答案 0 :(得分:2)

您可以使用POST ajax请求,但必须将?isAjax = 1 添加到网址,将 form_key 添加到params。例如:

var values = {
    'form_key': "<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>"
    // ...
};
$jq.post('<?php echo Mage::helper('adminhtml')->getUrl("..."); ?>?isAjax=1', values);

答案 1 :(得分:0)

此代码生成的网址:

$this->getUrl('prodcal/adminhtml_prodcaltab/saveLeadDays')
找不到

,因此您被重定向到仪表板。如果您手动尝试,则没有key函数自动添加的getUrl()变量,因此您会收到该错误。 key是一种会话控制器,并且总是在变化。

要获得正确的控制器操作,您必须检查文件结构。与您的getUrl参数一样,它应该是/ app / code / local(或社区)/ YourName / Prodcal / controllers / Adminhtml / ProdcaltabController.php

以这种方式回复您的回复:

$array = array('works');    
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($array));