Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax事件处理程序不更新变量?_Javascript_Ajax_Jquery_Callback - Fatal编程技术网

Javascript Ajax事件处理程序不更新变量?

Javascript Ajax事件处理程序不更新变量?,javascript,ajax,jquery,callback,Javascript,Ajax,Jquery,Callback,我在获取.click函数中声明的变量时遇到问题,该变量将在click函数中的Get函数中更新。我已经收集到,即使变量具有相同的名称,但在Get函数中,它实际上是在重新声明它 我试图找到一些对我有帮助的例子,但在我看来,Get方法是一个特殊的函数,这些例子似乎并不适用 我希望“SettingContentToEdit”的值使用get函数检索的信息进行更新 下面是代码 谢谢你的帮助 $(".cellSetting").click(function () { var clicke

我在获取.click函数中声明的变量时遇到问题,该变量将在click函数中的Get函数中更新。我已经收集到,即使变量具有相同的名称,但在Get函数中,它实际上是在重新声明它

我试图找到一些对我有帮助的例子,但在我看来,Get方法是一个特殊的函数,这些例子似乎并不适用

我希望“SettingContentToEdit”的值使用get函数检索的信息进行更新

下面是代码

谢谢你的帮助

 $(".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万个重复项。可能是重复项,谢谢,搜索内容不是很明显。