Я создаю небольшое приложение для календаря, в 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-файла.
Почему бы не вернуть $eventlist->addEvent($u_id, $title, $type.......
часть скрипта, echo $eventlist->addEvent($u_id, $title, $type.......
Затем в методе addEvent
возвращайте что-то, то есть идентификатор события.
Затем вместо проверки страницы пусто, вы проверяете идентификатор ( if (!isNaN(data))
isNotANumber ) , таким образом вы знаете, что закончили вставлять свое событие, так как ваша страница не вернется, пока не будет ID.