JS全局变量没有在ajax中更新

时间:2017-09-26 08:52:09

标签: javascript jquery ajax

这是我的代码:

我基于here

的窗口变量
<script>
                $(window).on("load", function() {

                   function myForeverFunc(){
                       window.global_time = "3";
                       $.ajax({
                           url: "index.php?action=showReminder",
                           cache: false,
                           success: function(data){
                               if(data && data.charAt(0) === "1"){

                                    window.global_time = "1";
                               }else{
                                   console.log("test");
                                   window.global_time = "2";
                                }
                           }
                        });
                        console.log(window.global_time);
                    }
                   setInterval(myForeverFunc, 60*1000);
               });
           </script>

这只显示“3”,它应该在ajax函数的else部分更新为“2”。

3 个答案:

答案 0 :(得分:3)

因为Ajax调用是异步的。

success:function(){}内的内容/语句只有在收到Ajax调用的响应后才会执行。

如果您将控制台放在success:function(data){}

 success: function(data){
      console.log("Data from Ajax request is received");
 }
在记录“3”后,将记录

“收到Ajax请求的数据”。 I.e收到服务器/请求的响应后。

答案 1 :(得分:0)

由于$.ajax()执行异步HTTP请求,它不会实时返回数据,因此您应该在console.log回调中移动success,以便在$.ajax({ url: "index.php?action=showReminder", cache: false, success: function(data){ if(data && data.charAt(0) === "1"){ window.global_time = "1"; }else{ console.log("test"); window.global_time = "2"; } console.log(window.global_time); } }); 回调时显示结果从服务器端返回:

        List<String> commands = new ArrayList<String>();
        commands.add("cmd.exe");
        commands.add("/k");
        commands.add("cd D:/" + " && D: && git clone --depth 1 <url>");
        ProcessBuilder pb = new ProcessBuilder(commands);
        pb.redirectErrorStream(true);

        Process prs = pb.start();
        prs.waitFor();
        BufferedReader input = new BufferedReader(new InputStreamReader(prs.getInputStream()));

        String line = null;
        while((line = input.readLine())!= null) {
            output = output + line;
            System.out.println(line);
        }
        System.out.println(output);
        // final String fileAsText = input.lines().collect(Collectors.joining());
        //System.out.println(fileAsText);

        input.close();

希望这有帮助。

答案 2 :(得分:0)

<script>
            $(window).on("load", function() {

               function myForeverFunc(){
                   window.global_time = "3";
                   $.ajax({
                       url: "index.php?action=showReminder",
                       cache: false,
                       success: function(data){
                           if(data && data.charAt(0) === "1"){

                                window.global_time = "1";
                           }else{
                               console.log("test");
                               window.global_time = "2";
                            }
                            console.log(window.global_time);
                       }
                    });

                }
               setInterval(myForeverFunc, 60*1000);
           });
       </script>