如何从ajax返回一个全局变量来显示dhtmlx调度程序lightbox

时间:2016-06-08 16:16:29

标签: javascript ajax asynchronous dhtmlx-scheduler

这里有另一个问题。我正在使用dhtmlx调度程序,特别是onBeforeLightbox事件。此事件将返回true以显示灯箱,否则返回false。我正在尝试根据特定条件设置是否显示灯箱的参数。但是,我坚持使用ajax请求作为局部变量的响应,并且超出了onBeforeLightbox事件中的范围。主要是我一直在提到几篇文章: question 14220321question 5316697。我已经尝试过使用promises和callbacks,但无论哪种方式,我仍然在成功,完成或回调函数中使用局部变量。到目前为止,唯一有效的方法是将异步设置为false。我知道,我知道,这很糟糕。这是我正在处理的代码:

scheduler.attachEvent("onBeforeLightbox", function(event_id) {
    resp=null;
    var ev = scheduler.getEvent(event_id);
    ev.wono = orderNo;
    var id = event_id;
    var sdate = scheduler.getEvent(event_id).start_date;
    var edate = scheduler.getEvent(event_id).end_date;

    var xhr = new XMLHttpRequest();
    var url = "../php/valAppts.php";
    xhr.open("POST", url, false);
    xhr.setRequestHeader("X-INDEX", orderNo);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            resp = xhr.responseText;
        }
    }
    xhr.send();
    return resp;
});

valApps.php返回true或false,具体取决于sql查询的结果。如何在onBeforeLightbox事件范围内获取xhr.responseText而不必将async设置为false?我想这个解决方案在我看来更加简单。杜!

1 个答案:

答案 0 :(得分:0)

在请求完成之前返回了resp。您必须从if语句返回Story,如下所示。

TypeError