Ajax事件处理程序不更新变量
Ajax event handler does not update variables?
我在获取在.click函数中声明的变量时遇到问题,该变量将在click函数中的Get函数中更新。我已经了解到,即使变量具有相同的名称,在Get函数中,它实际上是在重新声明它。
我试着找一些例子来帮助我,但在我看来,Get方法是一个如此专业的函数,这些例子似乎并不适用。
我希望用get函数检索到的信息更新"SettingContentToEdit"的值。
下面是代码。
谢谢你的帮助!
$(".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调用是异步的。get()
函数的成功处理程序在您的单击处理程序和alert()完成后的某个时间调用。您可以引用成功处理程序中的局部变量,但成功处理程序后面的代码在成功处理程序执行之前执行。
这是因为get()
操作是异步的。调用它只会启动网络操作,然后继续执行javascript(而网络操作在后台工作)。启动网络操作后,会调用您的alert()
。然后,稍后,Ajax调用完成,并执行成功处理程序。
这是一个非常常见的错误,在SO上确实被问了数百次(如果不是数千次的话)(我个人可能已经回答了20-30次),所以一开始你并不是唯一一个错过这一理解的人。
如果您想使用ajax操作的结果,那么您需要将执行此操作的代码放在成功处理程序中,或者放在从成功处理程序调用的函数中。您不能将它放在get()
函数之后,因为它在知道结果之前执行得太早。
SettingContentToEdit
,你会看到值已经更新。
要么将代码放入get
函数中(在这里您可以看到显示正确值的警报),要么使请求同步(您必须查找jQuery文档,因为我不使用jQuery)。
相关文章:
- Jquery-每个循环不更新变量
- 函数返回后更新变量
- 我无法通过angularjs中的指令更新变量
- 可以't在quizz页面范围问题上用最终分数更新变量
- 如何在AJAX会话之外更新变量?(Backbone JS/CoffeeScript)
- Javascript 对象方法不更新变量
- 当jquery中的输入发生更改时更新变量
- 无法使用AngularJS更新变量
- 在arr.splice()之后更新变量
- Javascript承诺并更新变量
- jQuery-在输入值更改时更新变量
- 使用数据属性通过 jquery 定位和更新变量
- 从数组中删除不会更新变量内的引用
- 冒泡 从嵌套函数更新变量
- 在 .click 上使用 $.ajax 更新变量
- Javascript - Bootstrap-Slider,如何根据滑块的值更新变量
- JavaScript Ajax 不按时更新变量
- 如何在 JS 中更新变量
- Javascript 没有更新变量
- 在函数中更新变量时,变量不会反映视图中的更新