2014-10-30 80 views
1

我有一个内联编辑器,它使用AJAX函数保存内容。这个函数调用我的Yii控制器来保存数据。这一切工作正常。Yii Ajax保存在URL重写后给出响应301

现在我使用.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

进入您的浏览器的网络调试,检查请求的URL一旦你的AJAX请求被触发。 - >这里..检查你的URL-Path。

1)我保证,你的相对路径在../inhoud/opslaan/id/" + id附近工作不正常。你应该使用绝对路径。在应用程序中处理绝对路径有很多种方法。例如,在Yii中,你可以添加到您的布局HTML-头:

<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”。如果AJI在Yii方面被阻止,你需要通过配置你的“过滤器”和东西来使它工作。

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), 
     ), 
), 
+0

请求的URL是如下:http://本地主机/网站/ inhoud/opslaan/id/9 事情是,当我将这个URL复制到我的浏览器时,我可以正常访问页面。刚刚测试和绝对路径也给了301 – Daniel 2014-10-30 12:51:51

+0

请将您的控制器的“规则”,“过滤器”和“accessRules”添加到您的示例中。 – lin 2014-10-30 12:55:50

+0

添加访问规则。用户已登录.. – Daniel 2014-10-30 12:58:44