我遇到问题,在.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"
});
答案 0 :(得分:0)
AJAX是异步的。如果您检查SettingContentToEdit
比您正在做的晚一秒左右,您会看到该值已更新。
将代码放在get
函数内(警报显示正确的值)或使请求同步(您必须查找jQuery文档,因为我不使用jQuery)
答案 1 :(得分:0)
您的问题是您的ajax调用是异常的。 {»1}}函数的成功处理程序在您的单击处理程序和alert()已完成后的某个时间调用。您可以在成功处理程序中引用局部变量,但成功处理程序之后的代码在成功处理程序之前执行。
这是因为您的get()
操作是异步的。调用它只是启动网络操作然后你的javascript执行继续(当网络操作在后台工作)。启动网络操作后,将调用get()
。然后,一段时间LATER,Ajax调用完成并执行成功处理程序。
这是一个非常常见的错误,确实在这里被问过并回答了数百次(如果不是数千次)SO(我个人可能已经回答了20-30次)所以你并不是唯一一个错过这种理解的人。
如果要使用ajax操作的结果,那么您需要将执行该操作的代码放在成功处理程序中,或者将其放在您从成功处理程序调用的函数中。你不能把它放在alert()
函数之后,因为它会在结果知道之前过早执行。