【问题标题】:Use AJAX request to get an Array and use inside JavaScript script [duplicate]使用 AJAX 请求获取数组并在 JavaScript 脚本中使用 [重复]
【发布时间】:2019-11-12 00:23:09
【问题描述】:

我正在制作一个实时更新图表,为此,我制作了一个包含所需数据的单独文件。我使用 AJAX 在我的主页上提出了一个请求,以便我可以将数组放入主页。但是由于某种原因,我不能在请求之外使用这个数组。我只需要在零件内部使用这个数组。
这是我所拥有的:

<script>
    $(document).ready(function(){
      $.getJSON("loadchart.php", function(data){
          var sensor1 = data[0];
          var sensor2 = data[1];
          var sensor3 = data[2];
          var sensorsum = data[3];
      });
    });
    console.log(sensor1);

    //My chart stuff down here

当我尝试控制数组的日志时,它给出了一个错误:

Uncaught ReferenceError: sensor1 is not defined
    at main.php:107

这是我尝试的新功能:

async () => {
      async function foo() {
        return $.ajax({
          url: "loadchart.php",
          success: function(data){
            return data;
          }
        });
      }

    var result = await foo();

    console.log(result);
    };

【问题讨论】:

  • 您的错误来自范围问题顺便说一句,但主要问题是上面的链接。
  • 您无法读取变量“sensor1”,因为该变量稍后在作用域中声明,因为 ajax 响应是异步的,并在读取该变量后调用。检查@ASDFGerte 发布的链接。
  • @ASDFGerte 仅将其从 AJAX 请求中取出不是更简单的解决方案吗?
  • @ASDFGerte 我将不得不更改我的 $.getJSON?
  • @Matheus 这里是jsfiddle,其中包含一些使用 jquery 的延迟对象示例,希望对您有所帮助

标签: javascript arrays ajax


【解决方案1】:

sensor1 未定义有两个原因。

一个原因是您在较低范围内声明了变量。您无法访问在回调函数之外的回调函数中声明的变量。

第二个原因是因为在您调用的 api 给出响应后调用了回调函数。但是,您正试图在脚本运行时立即访问该变量。这行不通,因为您需要先定义变量。

解决办法:

$(document).ready(function(){
    $.getJSON("loadchart.php", function(data){
         var sensor1 = data[0];
         var sensor2 = data[1]; 
         var sensor3 = data[2]; 
         var sensorsum = data[3];

         //move the console.log into this scope.
         console.log(sensor1);
     }); 
}); 

请记住,console.log() 仅在以下情况下有效:

请求成功

返回的数据与您使用的数据结构相同。

【讨论】:

  • 这不是我需要的,我需要使用AJAX请求中的sensor1
  • 是的。所以不要做 console.log 只需使用 sensor1
  • Sensor1 无法处理 AJAX 请求...
猜你喜欢
  • 2017-05-25
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 2018-05-01
相关资源
最近更新 更多