我正在尝试使用Ajax查询中的数据填充select元素。我收到了数据:
['这是对这个书签的评论。 ......,250'],[哇, 另一个评论。 ......,251',['好吧,这只是另一个评论。 ......,252']
...但我不能用数据填充实际的select元素。到目前为止,我有:
CKEDITOR.dialog.add( 'commentDialog', function( editor ) {
function get_bookmark_comments_as_object () {
var objBookmark = new Object({
items: []
});
objBookmark.id = 7193;
$.ajax({
url: base_url + "comments/jq_get_bookmark_comments_as_object/" + objBookmark.id,
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
async: false,
success: function (element) {
for (var i=0;i<element.length;i++) {
objBookmark.items.push("['" + element[i].comment_snippet + ", " + element[i].bookmark_comment_id + "']");
}
String.prototype.unquoted = function () { return this.replace (/(^")|("$)/g, '') }
var string = objBookmark.items.join(', ');
console.log(string);
return string.unquoted();
},
error: function () {
}
});
}
...
......和:
return {
// Basic properties of the dialog window: title, minimum size.
title: 'Comment Properties',
minWidth: 400,
minHeight: 200,
// Dialog window contents definition.
contents: [
{
// Definition of the Basic Settings dialog tab (page).
id: 'tab-basic',
label: 'Basic Settings',
// The tab contents.
elements: [
{
// Text input field for the abbreviation text.
type: 'select',
id: 'comment',
label: 'Select a Comment',
items: [['Select a Comment', 0]].concat( get_bookmark_comments_as_object() ),
setup: function( element ) {
this.setValue( element.getText() );
},
commit: function( element ) {
...
}
}
]
}
],
正如您在get_bookmark_comments_as_object()
函数中看到的那样,我将以确切的格式返回一个字符串。
任何返回普通数组或字符串的尝试都会使select元素表现得很奇怪(例如,字符串周围的双引号会导致CKEditor将整个字符串拆分为字符部分)。然而,当我从console.log()
结果中复制并粘贴时,它可以正常工作。
我为items: ...
尝试了多种变体,没有可用的结果。
我尝试将jQuery / Ajax代码放在setup: ...
和commit: ...
中,但没有可用的结果。
我也尝试了fix from a similar thread,但这也没有做任何事情。
我已经尽我所能,剩下的东西对我来说是个谜。
更新
经过一番抨击后,我发现了:
var items = [['And here's a comment on this Bookmark. ...', '250'], ['Wow, another comment. ...', '251'], ['Okay, it's just another comment. ...', '252']];
...有效,而:
var items = get_bookmark_comments_as_object();
...不会,即使字符串相同。
所以,无论出于何种原因,CKEditor(或者,我认为,JavaScript)都在窒息,我不知道是什么。
答案 0 :(得分:0)
以下是我在CKEDITOR小部件对话框中所做的事情。
std::chrono::system_clock::now()
答案 1 :(得分:0)
要可靠地执行此操作,我发现您必须在小部件的“ onLoad”功能中执行AJAX请求。从那里,您可以使用其“添加”功能填充窗口小部件。需要注意的是,您需要将窗口小部件分配给AJAX回调函数之外的变量(使用'this')。
{
type: 'select',
id: 'myselect',
label: 'The select will be empty until it is populated',
items: [ ],
onLoad: function(api) {
widget = this;
$.ajax({
type: 'GET',
url: 'path/to/your/json',
dataType: 'json',
success: function(data, textStatus, jqXHR) {
for (var i = 0; i < data.length; i++) {
widget.add(data[i]['label'], data[i]['value']);
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log('ajax error ' + textStatus + ' ' + errorThrown);
},
});
},
},