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

时间:2016-10-24 18:44:39

标签: javascript jquery ajax asynchronous

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

3 个答案:

答案 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);
}