Knothead ここに、別の問題があります。私は dhtmlx スケジューラ、特に onBeforeLightbox イベントを使用しています。このイベントは、ライトボックスを表示する場合は true を返し、それ以外の場合は false を返します。特定の条件に応じてライトボックスを表示するかどうかのパラメータを設定しようとしています。しかし、私は ajax リクエストからの応答がローカル変数であり、onBeforeLightbox イベント内の範囲外であることに固執しています。主に、質問14220321と質問 5316697の 2 つの記事を参照してきました。 . プロミスとコールバックを使用してみましたが、どちらの方法でも、成功、完了、またはコールバック関数内のローカル変数に固執しています。これまでのところ、機能しているのは async を 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 は、SQL クエリの結果に応じて true または false を返します。async を false に設定せずに、onBeforeLightbox イベントのスコープ内で xhr.responseText を取得するにはどうすればよいですか? 現時点では、解決策ははるかに簡単だと思います。当たり前!