我正在使用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);
}
然而,当该文件将该请求发送到eventlist
对象以执行addEvent
方法时,该文件将返回到JavaScript函数。然后该函数立即尝试填充事件div,因此它不起作用,因为addEvent
方法尚未完成。但是,当你刷新页面时,它工作正常,所以我知道它正确插入它们,它只需要等待第二个PHP文件完成。
答案 0 :(得分:1)
为什么不将$eventlist->addEvent($u_id, $title, $type.......
部分返回给脚本,
echo $eventlist->addEvent($u_id, $title, $type.......
。
然后在你的addEvent
方法中返回一些内容,即事件的ID。
然后,您检查的是ID ( if (!isNaN(data))
isNotANumber ),而不是检查页面是否为空白,因此您知道你已经完成插入你的活动,因为你的页面在有了ID之前就不会返回。