Я делаю небольшое приложение для календаря на PHP и JavaScript. Чтобы заполнить события div
на первой странице, я запускаю эту функцию:
function populateEvents() {
$.ajax({
type: "GET",
url: "populateEvents.php",
success: function(data, textStatus, XMLHttpRequest) {
$('#events').html(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert("Status: " + textStatus + ". Error thrown: " + errorThrown);
}
});
}
Довольно просто, populateEvents.php
выполняет большую часть работы.
Теперь, когда я хочу добавить событие, я вызываю следующую функцию:
function createEvent(u_id) {
var title = $("#titleInput").val();
var type = $("#typeSelect").val();
var location = $("#locationInput").val();
var date = $("#inputDate").val();
var time = $("#inputTime").val();
var allday = $('#allDaySelect:checked').val() !== undefined ? '1' : '0';
var duedate = type == 'todo' ? date : '';
var notes = $("#inputNotes").val();
var output = 'u_id=' + u_id + '&title=' + title + '&type=' + type + '&location=' + location + '&date=' + date + '&time=' + time + '&allday=' + allday + '&duedate=' + duedate + '¬es=' + notes;
$.ajax({
type: "GET",
url: "addEvent.php",
data: output,
success: function(data, textStatus, XMLHttpRequest) {
if (data == '') {
toggleNewEvent();
populateEvents();
} else {
// extract form problems from formProblems, in form: title=empty&date=empty&...
var errorArray = data.split("&");
var fields = '';
$.each(errorArray, function(index, value) {
var field;
var smallArray = value.split("=");
field = smallArray[0];
fields = fields + field + ', ';
});
alert('You must fill in the following fields: ' + fields);
}
},
error: function(jqXHR, textStatus, errorThrown) {
alert("Status: " + textStatus + ". Error thrown: " + errorThrown);
}
});
}
Немного сложнее, но я уверен, что ты понял суть. Значения, отправленные на addEvent.php
, возвращенная проанализированная строка и т. Д., События повторно заполнены. Теперь я просто реструктурировал всю сторону PHP, чтобы реализовать класс eventlist
и класс событий. Раньше файл addevent.php
выполнял всю реальную работу бэкэнда, но теперь этот файл (после некоторой проверки) сводится к следующему:
if ($return == '') {
/*If return is empty, everything is fine, carry on.*/
$eventlist->addEvent($u_id, $title, $type, $date, $time, $allday, $location, $dueby, $notes);
} else {
/*Throw an error*/
echo ($return);
}
В результате, однако, этот файл возвращается к функции JavaScript при отправке этого запроса к объекту eventlist
для выполнения метода addEvent
. Затем функция пытается немедленно заполнить событие div, и в результате оно не работает, потому что метод addEvent
еще не завершен. Однако когда вы обновляете страницу, она работает нормально, поэтому я знаю, что она вставляет их правильно, просто нужно дождаться окончания работы второго файла PHP.