我的控制器中有这个功能:
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);
});
});
答案 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));