Javascript Ajax事件处理程序不更新变量?
我在获取.click函数中声明的变量时遇到问题,该变量将在click函数中的Get函数中更新。我已经收集到,即使变量具有相同的名称,但在Get函数中,它实际上是在重新声明它 我试图找到一些对我有帮助的例子,但在我看来,Get方法是一个特殊的函数,这些例子似乎并不适用 我希望“SettingContentToEdit”的值使用get函数检索的信息进行更新 下面是代码 谢谢你的帮助Javascript Ajax事件处理程序不更新变量?,javascript,ajax,jquery,callback,Javascript,Ajax,Jquery,Callback,我在获取.click函数中声明的变量时遇到问题,该变量将在click函数中的Get函数中更新。我已经收集到,即使变量具有相同的名称,但在Get函数中,它实际上是在重新声明它 我试图找到一些对我有帮助的例子,但在我看来,Get方法是一个特殊的函数,这些例子似乎并不适用 我希望“SettingContentToEdit”的值使用get函数检索的信息进行更新 下面是代码 谢谢你的帮助 $(".cellSetting").click(function () { var clicke
$(".cellSetting").click(function () {
var clickedClass = $(this).attr("class");
var clickedItemID = $(this).attr("id")
var SettingContentToEdit = "not changed";
var JSONSend = {
'ItemName': clickedItemID, //send the item name so the model knows which one to pull up!
'ItemSetting': clickedClass
};
$.get(
'/Home/getItem',
JSONSend,
function (data) {
// $('#dialog').html(data.ItemSettings[data.SettingToEdit]);
SettingContentToEdit = data.ItemSettings[data.SettingToEdit];
alert(SettingContentToEdit); //returns the correct info
}
);
alert(SettingContentToEdit); //returns "not changed"
});
AJAX是异步的。如果检查SettingContentToEdit的时间比您现在晚一秒左右,您会看到该值已更新
要么将代码放在get函数中,让警报显示正确的值,要么使请求同步,因为我不使用jQuery,所以您必须查找jQuery文档。您的问题是ajax调用是异步的。get函数的成功处理程序将在单击处理程序和警报完成后调用。您可以引用成功处理程序中的局部变量,但是成功处理程序后面的代码在成功处理程序执行之前执行 这是因为get操作是异步的。调用它只会启动网络操作,然后在网络操作在后台工作时,javascript执行将继续。启动网络操作后,将调用您的警报。然后,一段时间后,Ajax调用完成,并执行成功处理程序 这是一个非常常见的错误,事实上在这里已经被问了几百次,甚至几千次了,所以我个人可能已经回答了20-30次,所以你不是唯一一个一开始就没有理解的人
如果希望使用ajax操作的结果,则需要将执行该操作的代码放入成功处理程序中,或者将其放入从成功处理程序调用的函数中。您不能将它放在get函数之后,因为它在结果已知之前执行得太快。查找异步回调。回调函数数据{在函数$.get返回时尚未运行。SO上有100万个重复项。可能是重复项,谢谢,搜索内容不是很明显。