Javascript getJson返回未定义的值,而不是Json对象

Javascript getJson返回未定义的值,而不是Json对象,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我试图使用简单的getJson调用从服务器获取Json对象 在服务器端,一切看起来都很好。创建并返回Json: 但在前端,我的对象并没有映射到从服务器返回的Json。它在第一次调用和该值中未定义,然后它再次通过getJson并返回真实对象 这是我的代码: btnSaveNewMeeting.onclick = function () { var vm = { 'Title': $('#eventTitle').val(), 'StartAt': $('#

我试图使用简单的
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()中获取值并将其放入
会议
对象中

var meetings = GetAllScheduledMeetings();

function GetAllScheduledMeetings() {
    $.getJSON("/Meeting/GetAllScheduledMeetings", function (result) {
        return result;
    });
}
所以
GetAllScheduledMeetings()
应该只调用服务器并返回结果。但事实并非如此

当我在浏览器的控制台中调试时,发生了以下情况: 1.在按钮上,单击
GetAllScheduledMeetings()
将被调用。 2.getJson调用服务器,在那里创建并返回json对象。 3.它返回前端,但跳过整个
返回结果
part并将
undefine
值返回到
var meeting=GetAllScheduledMeetings()
4.我很少有例外,因为会议是
undefine
5. <代码>GetAllScheduledMeetings()
由于某种原因再次被调用,在所有这些都发生之后,在此调用中,result从服务器获取实际值


有人知道为什么会这样吗?为什么要进行两次调用,为什么在第一次调用中我没有从服务器获取数据?

GetAllScheduledMeetings从不返回任何内容(因此,返回未定义)并且“是异步的”,因此,在执行时,使用meetings时,变量未定义的概率非常高。 您需要重新编码GetAllScheduledMeetings,以将所有“if块”作为回调传递给您,或者使用任何其他方式处理异步代码(例如Promissions)

解决方案:


由于
$.getJSON
$.ajax
调用在默认情况下是异步的,所以您需要做的就是通过在调用定义中添加:
async:false
使它们同步。

哦,我明白了。。。但如何解决这个问题。我试图在getJSON之外生成一些变量,但结果无论如何在第一次传递中是未定义的。。。使用getJSON获取json对象并返回它的最佳方法是什么@Booster2选择此答案作为已接受答案(“向下投票”选项下的绿色勾选),以显示问题已解决。
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
}