我有以下ajax方法。成功之后,我想设置一个全局变量,但它似乎不起作用 - 控制台返回空对象。它只有在我将async定义为false时才有效。但是我想保持ajax方法异步。我怎样才能让它发挥作用?
var appointment = {};
if ($("#Appointment").is(":checked")) {
$.ajax({
type: "POST",
url: "someurl",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
dateStart: moment()
}),
// async: false,
dataType: "json",
success: function(data) {
ajaxCallBack(data);
}
});
function ajaxCallBack(data) {
var response = $.parseJSON(data.d);
appointment = { startDate: response.startDate, endDate: response.endDate };
}
}
console.log(appointment);
答案 0 :(得分:1)
console.log()
在ajaxCallback()
之前和appointment
设置之前触发(ajax
是异步的),以便在您可以运行的控制台中显示appointment
:
function ajaxCallBack(data) {
var response = $.parseJSON(data.d);
appointment = { startDate: response.startDate, endDate: response.endDate };
console.log(appointment);
}
或
function ajaxCallBack(data) {
var response = $.parseJSON(data.d);
appointment = { startDate: response.startDate, endDate: response.endDate };
printAppointment();
}
// define as global:
function printAppointment() {
console.log(appointment)
}
答案 1 :(得分:1)
Ajax以异步方式发生,这意味着在它之后出现的代码不会等待它完成。因此,在ajax必须获得填充对象所需的内容之前,您的console.log
正在执行。
尝试在回调中移动console.log
语句 - 将其放在您设置appointment
的行之后。
答案 2 :(得分:0)
ajax是一种异步操作。因此console.log
甚至会在ajax success
之前执行。从ajaxCallBack
函数
function ajaxCallBack(data) {
var response = $.parseJSON(data.d);
appointment = { startDate: response.startDate,
endDate: response.endDate };
console.log(appointment);
}