[英]getJson returns undefined value instead of Json object
我正在嘗試使用簡單的getJson
調用從服務器獲取Json對象。
在服務器端,一切看起來都不錯。 Json已創建並返回:
但是在前端,我的對象未映射到服務器返回的Json。 它在第一次調用和該值中未定義,然后再通過getJson再返回真實對象。
這是我的代碼:
btnSaveNewMeeting.onclick = function () {
var vm = {
'Title': $('#eventTitle').val(),
'StartAt': $('#startdatepicker').val() + ' ' + $('#starttimepicker').val(),
'EndAt': $('#enddatepicker').val() + ' ' + $('#endtimepicker').val()
}
var meetings = GetAllScheduledMeetings();
if (CheckIfMeetingsAreOverlapping(vm.StartAt, vm.EndAt, meetings)) {
addNewMeetingModal.style.display = "none";
$.ajax({
type: 'POST',
url: "/Meeting/Create",
data: vm,
success: function () {
$('#calendar').fullCalendar('refetchEvents');
}
});
ClearPopupFormValues();
}
}
所以我想從GetAllScheduledMeetings();
獲得價值GetAllScheduledMeetings();
並將其放在meetings
對象中
var meetings = GetAllScheduledMeetings();
function GetAllScheduledMeetings() {
$.getJSON("/Meeting/GetAllScheduledMeetings", function (result) {
return result;
});
}
因此, GetAllScheduledMeetings()
僅應調用服務器並返回結果。 但這沒有發生。
當我在瀏覽器的控制台中調試時,發生的事情是這樣的:1.在按鈕上單擊GetAllScheduledMeetings()
被調用。 2. getJson調用服務器,並在其中創建並返回json對象。 3.返回前端,但跳過整個return result;
部分,並將undefine
值返回給var meeting = GetAllScheduledMeetings();
4.由於會議undefine
我很少遇到異常GetAllScheduledMeetings()
.在發生所有這些情況之后,由於某種原因再次調用GetAllScheduledMeetings()
,並且在此調用結果中從服務器獲取了真實值。
有人知道為什么會這樣嗎? 為什么打了兩個電話,為什么在第一個電話中我沒有從服務器獲取數據?
GetAllScheduledMeetings從不返回任何內容(因此,返回未定義)並且“是異步的”,因此在執行時,使用會議時,不確定該變量的可能性很高。 您將需要重新編碼GetAllScheduledMeetings,以將所有“ if block”作為回調傳遞給您,或使用其他任何方式來處理異步代碼(例如Promises)。
function GetAllScheduledMeetings() {
$.getJSON("/Meeting/GetAllScheduledMeetings", function (result) { // This anonymous function is called asynchronously and returns result *in the blue*
return result;
});
// GetAllScheduledMeetings doesn't specify a return value so it's retVal is undefined
}
解:
由於$.getJSON
或$.ajax
調用默認情況下是異步的,因此您只需添加以下內容即可使它們同步: async: false
來調用定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.