我想将ExtJS存储与服务器上的Yii模型同步。读取很顺利,但对服务器的写入并不顺利:400错误请求(POST)。
响应为:"您无权执行此请求。"
数据确实是在POST中形成的:
表单数据
记录:{"article":"YD40516","oem":"3397004667","title":"''u0429''u0435''u0442''u043a…
店内构造函数:
this.proxy =
{
url: "index.php?r=backend/index&Table=" + this.modelName + this.params,
reader: {
root: "data",
totalProperty: "count",
type: "json"
},
writer: {
root: "records",
encode: true,
writeAllFields : false,
//type: "json"
},
type:"ajax",
// limitParam: this.limitParam,
};
我已经关注了这篇关于如何将csrfToken
添加到post ajax请求的文章,但它没有带来任何结果。仍然400错误的请求,没有添加Yii_CSRF_TOKEN
post参数,尽管在源html中有这样的插入:
$.ajaxSetup({
data: {"YII_CSRF_TOKEN": "63f62ed9c92752fab910386195d84eb8b0bbd420"},
cache:false
});
我试图在代理配置中添加方法重新定义,但没有用:
actionMethods: {
read: 'GET', write: 'GET'
},
仍然用于写入,在没有Yii_CSRF_TOKEN 的情况下进行POST
有什么帮助,有什么方向吗?
我在存储代理中设置了额外的参数:
this.proxy =
{
url: "index.php?r=backend/index&Table=" + this.modelName + this.params,
reader: {
...
},
actionMethods: {
read: 'GET', update: 'POST'
},
extraParams: {YII_CSRF_TOKEN : CSRF_TOKEN },
writer: {
root: "records",
encode: true,
type: "json"
},
type:"ajax",
};
但诀窍是插入CCD_ 3作为js变量。因此,在注册ExtJS js文件之前,我使用布局文件在html中手动插入CSRF_TOKEN
:在我插入的布局文件中:
echo "<script language='javascript'>
var CSRF_TOKEN = '" . Yii::app()->request->getCsrfToken() . "';
console.log('CSRF_TOKEN = '+ CSRF_TOKEN);
</script>";
在视图文件中,与商店相关的js脚本:
<?php Yii::app()->clientScript->registerScriptFile("js/UniversalStore.js"); ?>