jQuery Ajax Post - 无法使用回调函数设置全局变量?
Posted
技术标签:
【中文标题】jQuery Ajax Post - 无法使用回调函数设置全局变量?【英文标题】:jQuery Ajax Post - Unable to set global variable using callback function? 【发布时间】: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);
【问题讨论】:
javascript: Global variables after Ajax requests的可能重复 ***.com/questions/14220321/… @Ted 供您参考,它一点也不懒惰。我一直在挠头并在谷歌上搜索了几个小时。如果您不想像其他人所做的那样发布任何有用的答案,那么请不要将每个问题都标记为潜在的重复问题。如果您懒得提交带有一些解释的解决方案,那么您就是懒惰的人。 @Ted 很明显,您没有花足够的时间阅读人们的 cmets,就像您懒惰提交任何有用的答案一样。我再重复一遍-在提交我自己的问题之前,我已经遇到过您提到的帖子。也许您没有意识到,将一个答案与每个问题联系起来并不总是非常清楚 - 因此为什么人们使用 *** 来获得一些额外的帮助和指导,而不是被像您这样的人贬低。 【参考方案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);
【讨论】:
以上是关于jQuery Ajax Post - 无法使用回调函数设置全局变量?的主要内容,如果未能解决你的问题,请参考以下文章
jquery $.ajax $.get $.post的区别?
jquery $.ajax $.get $.post的区别?