【问题标题】:jQuery Ajax Post - Unable to set global variable using callback function?jQuery Ajax Post - 无法使用回调函数设置全局变量?
【发布时间】:2017-03-06 15:21:12
【问题描述】:

我有以下 ajax 方法。成功后我想设置一个全局变量,但它似乎不起作用 - 控制台返回空对象。仅当我将异步定义为 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);

【问题讨论】:

  • @Ted 供您参考,它一点也不懒惰。我一直在挠头并在谷歌上搜索了几个小时。如果您不想像其他人所做的那样发布任何有用的答案,那么请不要将每个问题都标记为潜在的重复问题。如果您懒得提交带有一些解释的解决方案,那么您就是懒惰的人。
  • @Ted 很明显,您没有花足够的时间阅读人们的 cmets,就像您懒惰提交任何有用的答案一样。我再重复一遍-在提交我自己的问题之前,我已经遇到过您提到的帖子。也许您没有意识到,将一个答案与每个问题联系起来并不总是非常清楚 - 因此为什么人们使用 stackoverflow 来获得一些额外的帮助和指导,而不是被像您这样的人贬低。

标签: javascript jquery ajax asynchronous


【解决方案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)
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • @Lucas Costa - 你们是对的人。我一遍又一遍地看到这个问题,我的眼睛在欺骗我:)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多