jQuery Ajax Post - 无法使用回调函数设置全局变量?
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);
在这个问题中,出现了无法使用回调函数设置全局变量的问题。原因是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的值了。
问题的原因是,由于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变量之后,能够正确地进行后续的操作。