【问题标题】:$.get/$.getJSON not delaying execution of whole script?$.get/$.getJSON 不会延迟整个脚本的执行?
【发布时间】:2013-06-01 12:13:10
【问题描述】:

我正在使用 fullcalendar 来展示我的网站成员的活动。每个人都可以添加自己的事件。每个事件都必须有唯一的 ID,我在 PHP 中使用 SELECT INCREMENT(MAX('id')) 获得。然后将正确的 var 传递给 JavaScript,这是一个问题。在第二次尝试添加新事件时,该数字将提供给 fullcalendar renderEvent 函数。第一次点击日历时,变量声明为空(在名为 newEventId 的变量中)。

这是我的代码:

function showCalendar() {

        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        var newEventId = '';

        $('#kalendarz').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month'
            },
            editable: false,
            dayClick: function(e)
            {

                $.getJSON('/ajax/call/bands/AddEvent', function(data) { 
                    newEventId = data.dane;
                });
                console.log(newEventId); // <- empty, then with ID at second click...
                $("#kalendarz").fullCalendar('renderEvent',
                        {
                            title: 'Termin zajęty',
                            start: e,
                            id: newEventId
                        });
            }, 
     });
  }

有什么问题? renderEvent 函数不等待 getJSON 完成工作?我可以解决它吗?

【问题讨论】:

  • $.getJSON 是 AJAX,AJAX 是异步的!
  • 解决方法是重构您的脚本以允许 Ajax 调用的异步特性。无论你想在$.getJSON() 之后做什么,都应该在从$.getJSON() 回调调用的函数中。

标签: php jquery ajax fullcalendar


【解决方案1】:

$.getJSON是AJAX,AJAX是异步的!设置在$.getJSON回调函数里面:

$.getJSON('/ajax/call/bands/AddEvent', function (data) {
    newEventId = data.dane;
    $("#kalendarz").fullCalendar('renderEvent', {
        title: 'Termin zajęty',
        start: e,
        id: newEventId
    });
});

【讨论】:

    【解决方案2】:

    getJson() 发起一个 AJAX 请求,它是异步的,getJSON 在发起 AJAX 请求后返回,但这并不意味着请求本身已经完成。因此,您可以交出一个 onSuccess 函数,该函数将在请求完成时使用接收到的数据进行调用。

    如果该机制无法以这种方式工作,您在发送请求时无法执行任何操作 - 想象一下单击某处,该单击调用一个函数并以某种方式启动了一个请求,那么一切都会等到请求发出完成:在最高级别,您甚至无法再移动鼠标,直到您收到一些响应数据 - 这根本不是用户友好的;)

    通过将所有代码放在您的请求之后很容易解决您的问题,这取决于它在 onSuccess 函数中的响应(您已经拥有该函数)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2021-07-03
      相关资源
      最近更新 更多