【问题标题】:getJson returns undefined value instead of Json objectgetJson 返回未定义的值而不是 Json 对象
【发布时间】:2017-02-23 16:31:48
【问题描述】:

我正在尝试使用简单的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(); 中获取价值并将其放入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 5. GetAllScheduledMeetings() 因某种原因再次被调用,这一切都发生了,并且在此调用结果中从服务器获取了真实值。

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

【问题讨论】:

    标签: javascript jquery json ajax


    【解决方案1】:

    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之外创建一些变量,但结果在第一遍中无论如何都是未定义的......使用getJSON获取json对象并返回它的最佳方法是什么? @Booster2ooo
    【解决方案2】:

    解决方案:

    由于默认情况下$.getJSON$.ajax 调用是异步的,因此您只需在调用定义中添加:async: false 即可使它们同步。

    【讨论】:

    • 选择此答案作为已接受(“downvote”选项下的绿色勾号)以显示问题已解决。
    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多