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

7 浏览
0 Comments

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

我有以下的ajax方法。在成功的情况下,我想要设置一个全局变量,但似乎无法实现 - 控制台返回空对象。只有当我将async设置为false时,它才起作用。然而,我想保持ajax方法的异步。如何让它工作呢?\n

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

0
0 Comments

在这个问题中,出现了无法使用回调函数设置全局变量的问题。原因是ajax是异步操作,所以console.log会在ajax的success之前执行。在ajaxCallBack函数中,变量appointment被赋值,但是在console.log中无法打印出正确的值。

解决这个问题的方法是将console.log放在ajax的success函数中执行,这样就能保证在ajaxCallBack函数完成之后再打印出正确的值。具体代码如下:

function ajaxCallBack(data) {
  var response = $.parseJSON(data.d);
  appointment = { startDate: response.startDate,
                  endDate: response.endDate };
  successCallback(appointment);
}
function successCallback(appointment) {
  console.log(appointment);
}
$.ajax({
  url: "your-url",
  type: "POST",
  data: "your-data",
  success: function(data) {
    ajaxCallBack(data);
  }
});

这样,通过将console.log放在successCallback函数中执行,就能够正确地打印出appointment的值了。

0
0 Comments

问题的原因是,由于Ajax是异步操作,所以在执行console.log()时,ajaxCallback()函数和设置appointment变量的操作尚未完成。因此,无法正确显示appointment的值。

解决方法是可以使用回调函数来确保在console.log()之前appointment变量已经被设置。其中一种解决方法是在ajaxCallback()函数中使用console.log(appointment)。另一种解决方法是将console.log(appointment)封装在全局函数printAppointment()中,并在ajaxCallback()函数中调用printAppointment()函数。

以下是整理后的文章:

在使用jQuery的Ajax Post方法时,有一个问题是无法通过回调函数设置全局变量。这个问题的原因是,由于Ajax是异步操作,所以在执行console.log()时,ajaxCallback()函数和设置appointment变量的操作尚未完成。因此,无法正确显示appointment的值。

为了解决这个问题,我们可以使用回调函数来确保在console.log()之前appointment变量已经被设置。下面是两种解决方法:

解决方法一:在ajaxCallback()函数中使用console.log(appointment)来显示appointment的值。具体代码如下:

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

解决方法二:将console.log(appointment)封装在全局函数printAppointment()中,并在ajaxCallback()函数中调用printAppointment()函数。具体代码如下:

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

通过以上两种方法,我们可以在使用jQuery的Ajax Post方法时成功设置全局变量并正确显示其值。这样可以确保我们在操作appointment变量之后,能够正确地进行后续的操作。

0
0 Comments

问题的原因是Ajax是异步进行的,意味着在其之后出现的代码不会等待它完成。因此,在Ajax还没有获取到所需的数据来填充对象之前,你的console.log已经执行了。

尝试将console.log语句移动到回调函数内部 - 将其放在设置appointment的那一行的右边。

Costa - 你们说得对。我一直看到这个问题一次又一次,我的眼睛玩了个把戏 🙂

0