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
}