我想将yii2查询参数传递给api。我的js代码类似于
function doInBackground(){
var params=<?=\Yii::$app->request->getQueryString()?>;
$.get('car/get-map-data',
{
"params":params
},
function(data){
if(data)
{
console.log(data);
}
});
}
而且我正在服务器中以字符串形式获取此搜索参数
"CarSearch%5Bcity_id%5D=&CarSearch%5Bmotor_category%5D=9&drp-make%5B%5D=3&CarSearch%5Bdrp_make%5D=%2C3&CarSearch%5Bdrp_model%5D=&CarSearch%5Bmakes%5D=%22%2C3%22&CarSearch%5Bmodels%5D=&CarSearch%5Bprice_start%5D=&CarSearch%5Bprice_end%5D=&CarSearch%5Byear_start%5D=&CarSearch%5Byear_end%5D=&CarSearch%5Bkm_start%5D=&CarSearch%5Bkm_end%5D=&CarSearch%5Buser_location%5D=&CarSearch%5Blat%5D=0.0&CarSearch%5Blong%5D=0.0&CarSearch%5Bradius%5D=1000000000&CarSearch%5Btitle%5D="
我的控制器动作是
$params=Yii::$app->request->queryParams;
$dataProvider=$searchModel->search($params);
但是我希望上面的参数字符串以params数组的格式加载以进行搜索。我该怎么做
首先,您应该在<?=\Yii::$app->request->getQueryString()?>;
周围加上引号,因为您不是返回对象而是字符串,但是所需的内容有所不同。
您应该使用Yii::$app->request->queryParams
并将其首先转换为json对象
params = <?=\yii\helpers\Json::encode(Yii::$app->request->queryParams);?>
并且只传递该变量而没有任何外部括号,如
$.get('car/get-map-data',params,
function(data){
if(data)
{
console.log(data);
}
});
这将发送请求,如
http://youdomain/car/get-map-data?param1=value1¶m2=value2
您的完整代码应类似于
function doInBackground() {
var params = <?=\yii\helpers\Json::encode(Yii::$app->request->queryParams);?>;
$.get('car/get-map-data', params,
function (data) {
if (data) {
console.log(data);
}
}
);
}