Ожидайте завершения внешнего метода до окончания?

Я создаю небольшое приложение для календаря, в 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 + '&notes=' + 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.