Yii2控制器中的额外参数ajax


Yii2 extra parameter ajax in controller

我需要对我的网格进行批量删除。我有jquery脚本

  $activeMassScriptJS= <<<JS
  $(document).ready(function(){
  $("button.product-update").on('click',function(e){
            e.preventDefault;
            var keys = $('#products-grid').yiiGridView('getSelectedRows');
            $.get('mass-status-movie', {keylist : keys}, function(data) { alert(keys[0]);});
            return false;
    });
});

JS;

控制器

public function actionMassdelete(){
    if (Yii::$app->request->post('keylist')) {
        $keys = Yii::$app->request->post('keylist');
        foreach ($keys as $key) {
            $model = Product::findOne($key);
            $model->delete();
        }
    }
    return $this->redirect(Url::previous());
}

它正在为地址工作/电影/索引,但我需要为地址/电影/索引工作?parameter=值怎么办?

您似乎有令人困惑的代码。您的代码正在向服务器发出get请求,但您的操作(不是向其发送请求的操作)正在检查post参数!您需要整理您正在发出的请求,并相应地检查值。以下是两种情况;

案例1您将ajax调用保留为get请求,因此您的代码是

$activeMassScriptJS= <<<JS
$(document).ready(function(){
$("button.product-update").on('click',function(e){
    e.preventDefault;
    var keys = $('#products-grid').yiiGridView('getSelectedRows');
    $.get('mass-status-movie', {keylist : keys}, function(data) { alert(keys[0]);});
    return false;
    });
});

您通过get请求发送的值现在有两种可用方式。在您指向的动作,即actionMassStatusMovie(),您可以这样访问它们;

public function actionMassStatusMovie($keyList){
    //Your code here
}

如果您一直希望keyList参数存在,则可以使用此选项。

您也可以访问脚本中任何位置的get参数,如Yii::$app->request->get('keylist')。在这种情况下,您不需要$keyList参数,所以您可以只使用

public function actionMassStatusMovie(){
        $keyList = Yii::$app->request->get('keylist');
    }

情况2

或者,您可以通过post请求发送数据。在这种情况下,您不使用参数,只需像您一直在做的那样检查它,

public function actionMassStatusMovie(){
        $keyList = Yii::$app->request->post('keylist');
    }

但要做到这一点,您需要更改原始的javascript代码以发出post请求。

 $activeMassScriptJS= <<<JS
  $(document).ready(function(){
  $("button.product-update").on('click',function(e){
            e.preventDefault;
            var keys = $('#products-grid').yiiGridView('getSelectedRows');
            $.post('mass-status-movie', {keylist : keys}, function(data) { alert(keys[0]);});
            return false;
    });
});

getpost请求是不同的,您的代码需要在使用它们的方式上保持一致!