【问题标题】:jquery parsing Json into var with .eachjquery使用.each将Json解析为var
【发布时间】:2016-03-11 17:03:05
【问题描述】:

需要帮助了解如何使其发挥作用。

给定:

var data = {"time":"20151206212722","Irms":"2940"}

和:

<script type="text/javascript">
    $.ajaxSetup({
      cache: false
    });
    setInterval(function() {
      $(function() {
        $.get("data-upload_emon.txt", function(data, textStatus) {
          console.log(data);
          $.each(data, function(key, value) {
            console.log(key);
            console.log(value);
            Irms = value.Irms
            console.log(Irms);

            $("#ajax1").fadeOut(200, function() {
              $("#ajax1").html(
                time
              ).fadeIn(2);
            }),
              $("#ajax2").fadeOut(200, function() {
              $("#ajax2").html(
                Irms
              ).fadeIn(2);
            })
          });
        },
              "json"
             );
      })
    }, 10000);
</script>

为什么 var Irms 未定义? 前三个控制台日志返回预期内容。 Console.log(Irms) 返回“未定义”

谢谢!!这让我发疯了。

【问题讨论】:

  • 尝试jQuery.getJson而不是get
  • 在分配任何东西之前尝试定义Irms,例如var Irms = value.Irms console.log(Irms);
  • 日志中关于value 的内容是什么?

标签: jquery json parsing each


【解决方案1】:

从您的代码 $.each(data, function(key, value) { 中,您正在遍历 JSON 对象的所有属性,因此 Irms = value.Irms 不是有效语句。

如果你有这样的输入数据:var data = {"time":"20151206212722","Irms":"2940"};那么如果你想获取Irms 那么你真的不需要$.each 循环。您只需要parse JSON 对象,并且只需要获取所需的属性,如下所示:

var data = '{"time":"20151206212722","Irms":"2940"}'; //JSON in string format
var obj = JSON.parse(data); //parsing it to get actual JSON object
Irms = obj.Irms //fetching Irms property of the object
console.log(Irms);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案2】:

    您有很多 console.logs 并没有真正说明问题发生在哪里,还有一堆非常小的语法问题可能导致奇怪的行为。

    根据您的第一个示例,数据只是一个对象,而不是数组,因此您不需要 .each 它。此外,正如评论所说,getJSON 可能会产生一些可读的代码。

    另外,不相关,我会在 .html 上使用 .text,因此除非您注入 html,否则它会正确转义。

    我未经测试的建议是:

    setInterval(function() {
      $.getJSON("data-upload_emon.txt", function(data) {
        console.log("data is", data);
        $("#ajax1").fadeOut(200, function() {
           $("#ajax1").html(data.time).fadeIn(2);
        });
        $("#ajax2").fadeOut(200, function() {
          $("#ajax2").html(data.Irms).fadeIn(2);
        })
      });
    }, 10000);
    

    注意缺少.each,去掉ajax1和ajax2之间的流氓逗号,直接使用数据。

    如果您仍想按原样使用 Irms 变量,我会在其前面添加一个 var 以确保其定义在正确的范围内。

    【讨论】:

    • 谢谢!我不得不添加 $.ajaxSetup({ cache: false });回来了。现在它完美地工作了。
    • 酷!我所说的对为什么它不起作用有意义吗?你也想接受答案吗?
    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多