我正在用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文件完成。
請.. **不要使用字符串作爲'data'參數**。你可以傳遞一個對象,這將減輕你不必關心逃跑的事情。 – ThiefMaster 2011-02-28 11:06:10
如何在javascript和php之間傳遞一個對象。 – 2011-02-28 11:11:36
他意味着'output'變量應該是一個json對象,這樣jquery將會跳過任何文本並傳遞正確的數據,例如。 '{u_id':1,'title':'這是我的標題'}' – Val 2011-02-28 11:29:27