簡體   English   中英

getJson返回未定義的值,而不是Json對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM