У меня есть некоторый код, который мне нужен для вставки массива из вызова Ajax, но у меня возникают проблемы с выяснением, как это сделать.
Вот код, с которым я пытаюсь работать:
let result = getResult();
let statusList = getStatusList();
console.log(result);
$('#resdatatable').dataTable({
data: result,
destroy: true,
columns: [
{ data: 'id', title: 'ID' },
{ data: 'bookingdatetime', title: 'Booking Date' },
{ data: 'name', title: 'Name' },
{ data: 'class', title: 'Class' },
{ data: 'pickupdatetime', title: 'Pick up' },
{ data: 'duration', title: 'Duration' },
{ data: 'dropdatetime', title: 'Drop off' },
{ data: 'age', title: 'Age' },
{ data: 'coverage', title: 'Coverage' },
{ data: 'quote', title: 'Quote' },
{
data: 'status',
title: 'Status',
render: function(data, type, row) {
let isKnown = statusList.filter(function(k) { return k.id === data; }).length > 0;
if (isKnown) {
return $('<select onchange="doit(' + row.id + ')">', {
id: 'resstatus-' + row.id, // custom id
value: data
}).append(statusList.map(function(knownStatus) {
let $option = $('<option>', {
text: knownStatus.text,
value: knownStatus.id
});
if (row.status === knownStatus.id) {
$option.attr('selected', 'selected')
}
return $option;
})).on('change', function() {
changeresstatus(row.id); // Call change with row ID
}).prop('outerHTML');
} else {
return data;
}
}
}
]
});
function getResult() {
return [{
'id': 1,
'bookingdatetime': '2019-11-01',
'name': 'John Doe',
'class': '',
'pickupdatetime': '',
'duration': '',
'dropdatetime': '',
'age': 18,
'coverage': '',
'quote': '',
'status': 'Confirmed'
}, {
'id': 2,
'bookingdatetime': '2019-11-01',
'name': 'Jane Doe',
'class': '',
'pickupdatetime': '',
'duration': '',
'dropdatetime': '',
'age': 21,
'coverage': '',
'quote': '',
'status': 'Open'
}, {
'id': 3,
'bookingdatetime': '2019-11-08',
'name': 'Mary Sue',
'class': '',
'pickupdatetime': '',
'duration': '',
'dropdatetime': '',
'age': 16,
'coverage': '',
'quote': '',
'status': 'Closed'
}, {
'id': 4,
'bookingdatetime': '2019-12-15',
'name': 'Charlie Brown',
'class': '',
'pickupdatetime': '',
'duration': '',
'dropdatetime': '',
'age': 25,
'coverage': '',
'quote': '',
'status': 'Unknown'
}];
}
/**
* jQuery plugin to convert text in a cell to a dropdown
*/
(function($) {
$.fn.createDropDown = function(items) {
let oldTxt = this.text();
let isKnown = items.filter(function(k) { return k.id === oldTxt; }).length > 0;
if (isKnown) {
this.empty().append($('<select>').append(items.map(function(item) {
let $option = $('<option>', {
text: item.text,
value: item.id
});
if (item.id === oldTxt) {
$option.attr('selected', 'selected')
}
return $option;
})));
}
return this;
};
})(jQuery);
// If you remove the renderer above and change this to true,
// you can call this, but it will run once...
if (false) {
$('#resdatatable > tbody tr').each(function(i, tr) {
$(tr).find('td').last().createDropDown(statusList);
});
}
function getResult2() {
$.ajax({
type : 'get',
url : 'reservations2.php?city=la',
dataType: 'json',
cache: false,
success : function(data)
{
response(data);
}
});
}
function doit(id) {
alert ("hi!" + id);
}
function getStatusList() {
return [{
id: 'Confirmed',
text: 'Confirmed'
}, {
id: 'Unconfirmed',
text: 'Unconfirmed'
}, {
id: 'Open',
text: 'Open'
}, {
id: 'Closed',
text: 'Closed'
}, {
id: 'Canceled',
text: 'Canceled'
}];
}
Когда я устанавливаю результат для getResult ();это работает отлично, но когда я устанавливаю результат в getResult2, это не так. Мне нужно получить массив из вызова Ajax, чтобы получить результат, я продолжаю читать о том, как возвращать вызовы Ajax, но я не получаю его для этого приложения. Как мне это сделать?
Для ясности: мне нужно заменить getResult
на getResult2
Это сводит меня с ума!