2017-02-23 101 views
0

我试图使用简单的getJson调用从服务器获取Json对象。getJson返回未定义的值而不是Json对象

在服务器端一切看起来不错。 JSON是创建并返回:

enter image description here

但在前端我的对象不是从服务器映射到返回的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 得到再次呼吁出于某种原因,这一切已经发生之后在这个调用结果中从服务器获得真正的值。

有人知道为什么会发生这种情况吗?为什么要打两个电话,为什么在第一次打电话时我没有从服务器获取数据?

回答

0

GetAllScheduledMeetings从不会返回任何东西(所以返回undefined)并且“是异步的”,所以在执行时使用会议时,变量未定义的概率非常高。 您需要重新编码GetAllScheduledMeetings来传递所有“if block”作为回调或使用任何其他方式来处理异步代码(例如Promise)。

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 
} 
+0

哦,我明白了......但如何解决这个问题。我试图让一些变量之外的getJSON,但结果无论如何未定义在第一遍...什么是得到json对象与getJSON并返回它的最佳方式是什么? @ Booster2ooo –

0

SOLUTION:

由于$.getJSON$.ajax调用都是异步的,所有你需要做的就是让他们同步加入:async: false调用的定义。

+0

选择此答案为已接受(“downvote”选项下的绿色勾号)以显示问题已解决。 – burtek

相关问题