【问题标题】:json getting data or calling functionjson获取数据或调用函数
【发布时间】:2011-12-31 20:37:35
【问题描述】:

这里的函数每秒被调用一次, 它只是从不输出: console.log("噪音:"+噪音);

所以出了点问题,我不知道怎么解决。

function readEye() {
    console.log("readEye");

    $.getJSON('output.json', function(data){
        faceDetected = data.faceDetected;
        frameCount = data.frameCount;
        noise = data.noise;
        console.log("noise: "+noise);
    });

    // show values in devPanel
    document.getElementById('faceDetected').innerHTML = "faceDetected: "+faceDetected;

}

【问题讨论】:

  • 我认为你应该每次都等到 $.getJSON 完成加载数据
  • 如果你在faceDetected...之前尝试console.log(data);会发生什么?
  • 如果你在 chrome 中加载它,按 ctrl+shift+j 打开开发者控制台并在 faceDtetcted = data.faceDtected 的脚本选项卡中设置一个断点,它会到达那个点吗?
  • @Ayman Safadi,-它从不显示日志。

标签: javascript jquery json


【解决方案1】:

您偶然发现了“异步陷阱”。 $.getJSON() 不会停止正常的程序流程,也不会等到完成。所以下面的行document.getElementById('faceDetected').innerHTML = "faceDetected: "+faceDetected; 将被立即调用,带有一个未定义的“faceDetected”变量。这将每秒发生一次,无论之前的任何请求是否完成......

一般来说,您应该只从 AJAX 请求的回调内部开始一个新的超时。此外,您应该只使用回调中的“faceDetected”或“noise”等变量。因此,如果您想将这些值分配给 DOM 元素,您应该在回调内部进行。

【讨论】:

  • 换句话说,一切都应该在回调中处理。 api.jquery.com/jQuery.getJSON查看链接中示例的成功回调
  • 但是为什么它至少不在控制台中显示“噪音:”?我还查看了示例,但我什至无法让回调工作。由于这里没有空间,我将发布一个新帖子。
【解决方案2】:

还要检查 output.json 的格式 - 它必须是格式正确的并通过 $.parseJSON 函数 (http://api.jquery.com/jQuery.parseJSON/)。如文档中所述(http://api.jquery.com/jquery.getjson/):

成功回调传递返回的数据,通常是 由 JSON 结构定义并解析的 JavaScript 对象或数组 使用 $.parseJSON() 方法。它还传递了文本状态 回应。

重要提示:从 jQuery 1.4 开始,如果 JSON 文件包含语法错误, 请求通常会静默失败。避免频繁的手工编辑 出于这个原因的 JSON 数据。

【讨论】:

  • 我的 json 看起来像这样:{ "noise": 0.21046373, "framecount": 259, "faceDetected": true }
  • 但随后有回报,但它们在 cmets 中从未为我工作。
  • 你的 json 是 {"noise": 0.21046373, "framecount": 259, "faceDetected": true} 但你需要 data.frameCount。如果更改为 data.framecount 会怎样?我认为这可能会导致沉默。
猜你喜欢
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 2023-01-16
  • 2022-01-10
  • 1970-01-01
  • 2017-12-13
相关资源
最近更新 更多