我的控制器里有这个功能:
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);
});
});
3条答案
按热度按时间8iwquhpp1#
您可以使用POST AJAX 请求,但必须在url中添加**?isAjax=1**,在params中添加form_key。示例:
fkaflof62#
此代码生成的URL:
无法找到,因此您将被重定向到 Jmeter 板。如果您手动尝试,您没有
getUrl()
函数自动添加的key
变量,因此会出现该错误。key
是一种会话控制器,并且总是在变化。为了得到正确的控制器操作,你必须检查你的文件结构。
以下列方式传回您的回应:
ybzsozfc3#
我遇到了同样的问题,并通过直接向url添加form_key来解决它: