簡體   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