magento AJAX 不工作

cwdobuhd  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(121)

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

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);
        });
    });

该URL似乎返回了整个管理 Jmeter 板页面,而不是预期的works文本。但是,如果我直接在浏览器中打开该URL,它确实显示了预期的文本。
我做错了什么?
我试过在url的末尾追加?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。如果我从控制台复制这个url并将其粘贴到浏览器中,它会按预期工作,并得到works文本。但当与jQuery post一起使用时,它会失败并重定向到 Jmeter 板。
**EDIT 2:**看起来post数据中的键是错误的,如果我将上面的键更改为使用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);
        });
    });
8iwquhpp

8iwquhpp1#

您可以使用POST AJAX 请求,但必须在url中添加**?isAjax=1**,在params中添加form_key。示例:

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

fkaflof62#

此代码生成的URL:

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

无法找到,因此您将被重定向到 Jmeter 板。如果您手动尝试,您没有getUrl()函数自动添加的key变量,因此会出现该错误。key是一种会话控制器,并且总是在变化。
为了得到正确的控制器操作,你必须检查你的文件结构。
以下列方式传回您的回应:

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

ybzsozfc3#

我遇到了同样的问题,并通过直接向url添加form_key来解决它:

$saveurl="<?=$this->getUrl('prodcal/adminhtml_prodcaltab/saveLeadDays');?>form_key=" + window.FORM_KEY;

相关问题