在事件功能完整日历中多个ajax调用

时间:2016-04-30 04:26:23

标签: javascript jquery ajax fullcalendar

我在页面中使用fullcalendar jQuery插件来创建/查看会议邀请。

我的新要求是在我们的页面中显示为该特定用户创建的Outlook会议。我的网络服务(用于从outlook中提取会议)花费最少45秒来发送响应。我不希望用户完全等待45秒。(性能问题)所以我只想先从db加载事件,然后我想追加作为webservice响应返回的事件。因此,用户不会感到太多延迟。

所以我只是进行了两次ajax调用以获取所需的详细信息。一个ajax调用是从本地数据库(SUCCESS)中提取事件,另一个是调用Web服务来提取在Outlook中创建的事件。

events: function(start, end, timezone,callback) {
            $.ajax({
                url:  // url hits db and gets meeting details in db
                dataType: 'json',

                success: function(response) {
                    var events = [];
               if(response != null){
                   alert("Success");
                    $.map(response ,function ( r ){
                       alert(r.title + " "  +  r.start + " " + r.end);

                      events.push({
                            title : r.title,
                            start : r.start,
                            end : r.end
                        });
                    });

               }    
               callback(events);
          }

          $.ajax({
                url:  // url calls webservice and gets meetings in Outlook
                dataType: 'json',

                success: function(response) {
                    var events = [];
               if(response != null){
                   alert("Success");
                    $.map(response ,function ( r ){
                       alert(r.title + " "  +  r.start + " " + r.end);

                      events.push({
                            title : r.title,
                            start : r.start,
                            end : r.end
                        });
                    });

               }    
               alert("External Events  "+ events.length);  //EXECUTED 

               callback(events);  //NOT EXECUTED
               }
        });
  }

现在的问题是,

1。首先,ajax调用工作正常。

2。我从Webservice获得了适当的回复,但回复没有附在日历上。

我的疑问是,

  1. 我们不能两次使用回调(事件)吗?

  2. 或者请建议我替代解决方案吗?

  3. 如果分别使用两个事件功能,则只会执行第二个事件功能。为什么第一个事件函数没有被执行?

3 个答案:

答案 0 :(得分:0)

您的代码没有任何问题。确保您从服务器获得的响应符合您的预期(例如,响应!= null)。

https://jsfiddle.net/5ds8z06p/

var foo = function(callback) {
  $.ajax({
    url: '/echo/json',
    success: function() {
      callback('first');
    }
  });

  $.ajax({
    url: '/echo/json',
    success: function() {
      callback('second');
    }
  });
};

foo(function(bar) {
  console.log(bar);
});

答案 1 :(得分:0)

有点旧,但有一种可供参考的方法。在您的第一个ajax调用中,而不是回调中,放入第二个ajax调用

$.ajax({
            url:  // url hits db and gets meeting details in db
            dataType: 'json',

            success: function(response) {
                var events = [];
           if(response != null){
               alert("Success");
                $.map(response ,function ( r ){
                   alert(r.title + " "  +  r.start + " " + r.end);

                  events.push({
                        title : r.title,
                        start : r.start,
                        end : r.end
                    });
                });

           }    
           //second call
           $.ajax({
            url:  // url calls webservice and gets meetings in Outlook
            dataType: 'json',

            success: function(response) {
                var events = [];
           if(response != null){
               alert("Success");
                $.map(response ,function ( r ){
                   alert(r.title + " "  +  r.start + " " + r.end);

                  events.push({
                        title : r.title,
                        start : r.start,
                        end : r.end
                    });
                });

           }    
           alert("External Events  "+ events.length); 

           callback(events); // return all results 
           }
         });
      }

答案 2 :(得分:-1)

只是在黑暗中拍摄,但之前使用undefined从.Net WCF服务获取json,其中包含json响应中的日期值我在设置了一个或多个日期字段时看到了此行为到$.ajax

DateTime.MinValue杀死了json序列化程序。一切似乎都按预期在客户端和服务器端工作,但从未调用过“成功”回调。填充所有日期值可以解决它。