我在一个项目中使用Yii框架,并且我使用了一个使用select2jquery的扩展。我无法理解ajax的实现是如何使用这个扩展或select2的。
我的ajax调用返回以下json。
[
{"id":"1", "text" : "Option one"},
{"id":"1", "text" : "Option one"},
{"id":"1", "text" : "Option one"}
]
yii扩展包含select2扩展,如下所示
$this->widget('ext.select2.ESelect2', array(
'name' => 'selectInput',
'ajax' => array(
'url'=>Yii::app()->createUrl('controller/ajaxAction'),
'dataType' => 'json',
'type' => 'GET',
'results' => 'js:function(data,page) {
var more = (page * 10) < data.total; return {results: data, more:more };
}',
'formatResult' => 'js:function(data){
return data.name;
}',
'formatSelection' => 'js: function(data) {
return data.name;
}',
),
));
我从这个问题中找到了一个相关的问题!链接到正在使用的扩展是YII select2扩展!
所以一周后我合并了这个问题的答案。
首先,让我强调select2Ajax,或者在我的例子中是YiiESelectExtension。
jquery的ajax选项与Eselect Extetion的ajax选项相同,即url、类型和数据类型,但成功查询后返回的格式略有不同。
至于Eselect/select2的结果集,需要返回两个参数。那就是
id : data.myOptionsValue;
text : data.myOptionText;
参考::https://select2.github.io/options.html#ajax
如果我们想自定义返回的结果集的格式,我们可以使用来扩展插件
'formatResult' => 'js:function(data){
return data.name;
}',
'formatSelection' => 'js: function(data) {
return data.name;
}',
我还遇到了一个问题,无法理解延期是如何申请的。环顾四周,我意识到我们有两个数据类型jsonp和json,这两种数据类型将以不同的方式处理数据。
Jsonp(json-pading)允许在查询时发送查询参数。至于我的情况,我没有传递任何其他参数,例如authkey e.t.c。在我的情况下,我将数据类型更改为json,并返回一个带有id和文本的json作为结果。请参阅下面的工作片段。
echo CHtml::textField('myElementName', '', array('class' => 'form-control col-lg-12'));
$this->widget('ext.select2.ESelect2', array(
'selector' => '#myElementName',
'options' => array(
'placeholder' => 'Search ..',
'ajax' => array(
'url' => Yii::app()->createUrl('controller/ajaxAction'),
'dataType' => 'json',
'delay' => 250,
'data' => 'js: function(term) {
return {
q: term,
};
}',
'results' => 'js: function(data){
return {results: data }
}',
),
),
));