繁体   English   中英

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

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

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

ajaxCallback()之前和设置appointment之前会触发console.log()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必须获得填充对象所需的内容之前就已执行。

尝试将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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM