我有一个内联编辑器,可以使用AJAX函数保存内容。此函数调用保存数据的Yii控制器。一切正常。
现在我使用.htaccess
和Yii urlManager缩短了我的网址。当我调用控制器来保存我的AJAX函数中的数据时,我收到301响应。如果我将请求的URL复制到浏览器中,一切正常。有谁知道为什么我的帖子无法到达控制器?
AJAX功能:
$.post("../inhoud/opslaan/id/" + id, {
dataType: "json",
data : editor.getData(),
success : alert('Opgeslagen!'),
} );
这个网址应该可以正常工作,但是会给出相同的响应
"../index.php?r=inhoud/opslaan&id=" + id
htaccess的:
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
urlManager:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
'about' => 'site/page/view/about/',
'edit' => 'paginaitems/index/',
// default controller url setup
'<controller:w+>/<id:d+>'=>'<controller>/view',
'<controller:w+>/<action:w+>/<id:d+>'=>'<controller>/<action>',
'<controller:w+>/<action:w+>'=>'<controller>/<action>',
)
),
控制器操作:
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'postOnly + delete', // we only allow deletion via POST request
);
}
array('allow',
'actions'=>array('create','update','opslaan'),
'users'=>array('@'),
),
public function actionOpslaan($id)
{
$model=$this->loadModel($id);
$model->content = $_POST['data'];
$model->save();
}
答案 0 :(得分:1)
进入浏览器的网络调试器,一旦触发了AJAX请求,请检查Request-URL。 - &GT;在这里..检查你的URL-Path。
1)我保证,你../inhoud/opslaan/id/" + id
附近的相对路径不能正常工作。你应该使用绝对路径。在应用程序中有很多方法可以处理绝对路径。例如,在Yii中,您可以将其添加到您的布局HTML-Head:
<script type="text/javascript">
//node base url set global var "baseURL"
var baseURL = '<?php echo Yii::app()->request->getBaseUrl(true); ?>';
</script>
通过这种方式,您可以构建绝对的请求URL:
<script type="text/javascript">
$.post(baseURL+"/inhoud/opslaan/id/" + id, {
dataType: "json",
data : editor.getData(),
success : alert('Opgeslagen!'),
});
</script>
2)同时查看“过滤器”,“操作”和“操作”。控制器中的“accessRules”。如果在Yii方面阻止了AJAX,你需要通过配置“过滤器”和东西来使其工作。
3)检查你的urlManager规则,并通过加入这条规则尽可能简单:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'/inhoud/opslaan/<id>' => array('inhoud/opslaan', 'urlSuffix' => '/', 'caseSensitive' => false),
),
),