Yii2 Ajax呼叫中禁止发布403帖子

时间:2019-04-09 04:33:01

标签: ajax yii2

我知道在stackoverflow上还有其他话题,但是对我来说仍然无效。我尝试制作一个简单的动态菜单,该菜单根据所选的<li> id生成动态内容。

这是生成菜单的代码:

foreach($cabang as $index=>$model){
 echo  '<li  id='.$model->idDpd->id_dpd.'>
            <a class="nav-link" href="#" role="tab" data-toggle="tab">'.$model->idDpd->dpd.'</a>
          </li>';

}

菜单创建成功。但是我对用Ajax生成的内容有疑问

这就是我的视图文件中的内容:

$script = <<< JS
$(document).ready(function(){

 function load_page_details(id)
 {
  $.ajax({

    url: "<?=Url::to(['/site/fetch']) ?>",
   method:"POST",
   data:{id:id}, //pass the 'id' of Load_page_details function parameter to the targeted URL
   success:function(data)
   {
    $('#page_details').html(data);
   }
  });
 }

//load page-details where the id in the database table equals 1. Set the default to 1 while page is loading for the first time.
/* load_page_details(1);*/

 $('.nav li').click(function(){
  var page_id = $(this).attr("id");
  load_page_details(page_id);
 });


});


JS;
$this->registerJs($script)

?>

这是我的SiteController和操作:

public function actionFetch(){

if (Yii::$app->request->isAjax) {

// fetch the $_POST["id"]
 $data = Yii::$app->request->post('id');
if(isset($data)) 
{
$query= Cabang::find()->where(['id_dpd'=> $data])
        ->joinWith('idDpd')
        ->all();

 $output = '';
 foreach($query as $model)
 {
  $output .= '
   <div role="tabpanel" class="col-lg-4 tab-pane fade show active" >
                  <div class="col-md-12">
                    <h4>'.$model->kota.'</h4>
                    <p>'.$model->alamat.'</p>
                    <p>'.$model->telp.'</p>
                    <p>'.$model->email.'</p>
                    <p>'.$model->jadwal.'</p>
                  </div>
                 </div>
  ';
 }
/* echo $output;*/
 // return Json    
    return \yii\helpers\Json::encode($output);
}

}


}

chorome开发工具:jquery.js:9175 POST http://localhost/%3C?=Url::to([%27/site/fetch%27])%20?%3E 403 (Forbidden)

在我的控制台中捕获了错误

我试图使fetch函数成为一个新的php文件,并将我的Ajax中的URL链接到该文件(在我的情况下,不是链接到控制器或SiteController),例如:url:url:"site/fetch.php",但它返回了{ {1}}

我在做什么错?我花了两天没有解决。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您的PHP不正确-您不能在Heredoc内使用<?= /* ... */ ?>。您需要使用临时变量:

$url = Url::to(['/site/fetch']);
$script = <<<JS
$(document).ready(function () {
    function load_page_details(id) {
        $.ajax({
            url: "$url",
            method: "POST",
            data: {id: id}, //pass the 'id' of Load_page_details function parameter to the targeted URL
            success: function (data) {
                $('#page_details').html(data);
            }
        });
    }
    $('.nav li').click(function () {
        var page_id = $(this).attr("id");
        load_page_details(page_id);
    });
});
JS;
$this->registerJs($script);