2014-10-30 82 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