Json 如何使用Yii2从ajax调用填充gridview
在我的项目中,我创建了一个搜索框。当我键入一些内容并单击“获取信息”按钮时,我使用ajax调用在控制台窗口中获取所有信息。现在我想在yii2gridview中填充这些数据。数据在每个运行时都会不同。我想把这些数据交给gridview的$dataprovider有可能吗 这是代码- CompaniesController.phpJson 如何使用Yii2从ajax调用填充gridview,json,yii2,Json,Yii2,在我的项目中,我创建了一个搜索框。当我键入一些内容并单击“获取信息”按钮时,我使用ajax调用在控制台窗口中获取所有信息。现在我想在yii2gridview中填充这些数据。数据在每个运行时都会不同。我想把这些数据交给gridview的$dataprovider有可能吗 这是代码- CompaniesController.php public function actionCompanyinfo(){ $text_in_search = $_GET['text_in_searc
public function actionCompanyinfo(){
$text_in_search = $_GET['text_in_search'];
$left_items_cat = ltrim($_GET['left_items_cat']);
if($left_items_cat == "Companies"){
$query = (new \yii\db\Query())
->select(['c.name', 'c.id'])
->from(['companies as c'])
->where('c.name LIKE :query')
->addParams([':query'=>'%'.$text_in_search.'%'])
->all();
$response['comapnies_matching'] = $query;
return \yii\helpers\Json::encode([
$response
]);
}
}
companys/index.php
$form = ActiveForm::begin();
$typeahead = $form->field($model, 'name')->textInput(['maxlength' => true]);
$getinfobtn = Html::SubmitButton( 'Get info', [ 'class' => 'btn btn-success' , 'id' =>'getinfo']) ;
ActiveForm::end();
myjsfile.js
$("#getinfo").click(function(){
var text_in_search = $("#companies-name").val();
var left_items_cat = $('#left-items li.active').text();
var url = "index.php?r=companies/companyinfo";
$.ajax({
url: url,
dataType: 'json',
method: 'GET',
data: {text_in_search,left_items_cat},
success: function (data, textStatus, jqXHR) {
// $( "#country"+id ).html(data[0].countries);
console.log(data[0]);
// **want to show this data in yii2 grid view**
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('An error occured!');
alert('Error in ajax request');
}
});
$("#getinfo").click(function(){
var text_in_search = $("#companies-name").val();
var left_items_cat = $('#left-items li.active').text();
var url = "index.php?r=companies/companyinfo";
$.ajax({
url: url,
method: 'GET',
data: {text_in_search,left_items_cat},
success: function (data, textStatus, jqXHR) {
//set the ajax response as your html content
$('#myDiv').html(data);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('An error occured!');
alert('Error in ajax request');
}
});
控制台窗口
comapnies_matching
:
Array(3)
0
:
{name: "ADC Therapeutics Sarl", id: "402"}
1
:
{name: "ADC Therapeutics Sarl", id: "407"}
2
:
{name: "ADC Therapeutics Sarl", id: "412"}
如何在gridview中显示/填充此数据???CompaniesController.php
public function actionCompanyinfo(){
$text_in_search = $_GET['text_in_search'];
$left_items_cat = ltrim($_GET['left_items_cat']);
if($left_items_cat == "Companies"){
$dataProvider= (new \yii\db\Query())
->select(['c.name', 'c.id'])
->from(['companies as c'])
->where('c.name LIKE :query')
->addParams([':query'=>'%'.$text_in_search.'%'])
->all();
return $this->renderPartial('gridview', [
'dataProvider' => $dataProvider,
]);
}}
您需要在gridview.php视图文件中呈现gridview
myjsfile.js
$("#getinfo").click(function(){
var text_in_search = $("#companies-name").val();
var left_items_cat = $('#left-items li.active').text();
var url = "index.php?r=companies/companyinfo";
$.ajax({
url: url,
dataType: 'json',
method: 'GET',
data: {text_in_search,left_items_cat},
success: function (data, textStatus, jqXHR) {
// $( "#country"+id ).html(data[0].countries);
console.log(data[0]);
// **want to show this data in yii2 grid view**
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('An error occured!');
alert('Error in ajax request');
}
});
$("#getinfo").click(function(){
var text_in_search = $("#companies-name").val();
var left_items_cat = $('#left-items li.active').text();
var url = "index.php?r=companies/companyinfo";
$.ajax({
url: url,
method: 'GET',
data: {text_in_search,left_items_cat},
success: function (data, textStatus, jqXHR) {
//set the ajax response as your html content
$('#myDiv').html(data);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('An error occured!');
alert('Error in ajax request');
}
});
您可以从控制器呈现并返回Gridview的HTML,然后在收到响应时返回。将HTML代码放在要显示它的位置,可能是当前Gridview所在的位置 编辑,添加代码示例:
public function actionCompanyinfo(){
$requestData = \Yii::$app->request->get();
$text_in_search = isset($requestData['text_in_search']) ? $requestData['text_in_search'] : "";
$left_items_cat = isset($requestData['left_items_cat']) ? trim($requestData['text_in_search']) : "";
if($left_items_cat == "Companies"){
$dataProvider = new ActiveDataProvider([
'query' => (new \yii\db\Query())
->select(['c.name', 'c.id'])
->from(['companies as c'])
->where('c.name LIKE :query')
->addParams([':query'=>'%'.$text_in_search.'%']),
'pagination' => [
'pageSize' => 20,
],
]);
return \yii\grid\GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
// your columns here...
['class' => 'yii\grid\ActionColumn'],
],
]);
}
}
在视图文件上,您应该创建一个区域(可能的元素)
然后在发出AJAX请求的js文件中,确保响应如下所示:
function (data, textStatus, jqXHR) {
$("#show-grid-here").html(data); //or data[0], I'm not sure. try both.
},
尝试返回完整的HTML Gridview而不是JSON。别忘了从ajax中删除数据类型JSON。@Sarath??您是如何知道Render Partial方法的?这将生成一个没有布局的HTML。请检查链接。重复上述代码..输出是…ajax请求中出错..这是谁的id 35; myDivI有相同的问题。
myDiv
我举了一个例子,你可以给出你自己的idalert(“ajax请求中的错误”);…在alertboxCall中显示这个,直接在浏览器中调用ajax URL,然后你可以看到真正的错误(如果它有任何PHP错误)。并检查alertbox中的jqXHR。您能提供一些代码帮助吗。我是yii2新手。我不想为gridview编写代码,因为我想在单击按钮时显示。请在控制器中显示您当前的代码(您为检索数据而调用的操作)以及发出请求和使用响应的代码(Javascript,可能在视图文件中)action companyinfo..在问题中给出您是否有要筛选的初始网格?或者这是您第一次展示它吗?如果不是第一次,请向我展示第一次显示网格的操作。我根据您的需要编辑了我的原始帖子,让我知道它是如何为您工作的。此外,您可能希望创建一个包括用于生成网格的代码,并从控制器接收数据提供程序。然后,您必须返回该页面的RenderAax。但首先,请使用给定的简单示例进行尝试。