在重写url后,Yii Ajax save会给出响应301

时间:2014-10-30 12:43:05

标签: php ajax .htaccess yii

我有一个内联编辑器,可以使用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();
}

1 个答案:

答案 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),
        ),
 ),