在完成之前等待外部方法完成?
我正在用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方面,以实现事件列表类和事件类。 以前, addevent.php
文件完成了所有实际的后端工作,但是现在,该文件(在一些validation之后)归结为:
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); }
但是,当该文件将该请求发送到eventlist
对象以执行addEvent
方法时,该文件将返回到JavaScript函数。 然后该函数尝试立即填充事件div,因此它不起作用,因为addEvent
方法尚未完成。 但是,当你刷新页面时,它工作正常,所以我知道它正确插入它们,它只需要等待第二个PHP文件完成。
为什么不返回$eventlist->addEvent($u_id, $title, $type.......
part到脚本, echo $eventlist->addEvent($u_id, $title, $type.......
然后在你的addEvent
方法中返回一些东西,即事件的ID。
然后,不是检查页面是否为空,而是检查ID ( if (!isNaN(data))
isNotANumber ) ,因此您知道已完成事件的插入,因为在页面具有ID之前页面不会返回。