jQuery Ajax Post -无法使用回调函数设置全局变量

jQuery Ajax Post - Unable to set global variable using callback function?

本文关键字:回调 函数 设置 全局变量 Ajax Post jQuery      更新时间:2023-09-26

我有以下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);

Ajax是异步发生的,这意味着在它之后出现的代码不会等待它完成。因此,您的console.log在ajax必须获得填充对象所需的内容之前执行。

尝试将您的console.log语句移动到回调内部-将其放在您设置appointment的行之后。

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)
}

ajax是一个异步操作。所以console.log甚至会在ajax success之前执行。控制ajaxCallBack函数中的变量

function ajaxCallBack(data) {
  var response = $.parseJSON(data.d);
  appointment = { startDate: response.startDate,
                  endDate: response.endDate };
  console.log(appointment);
}