Javascript getJSON完成回调

Javascript getJSON完成回调,javascript,jquery,callback,getjson,Javascript,Jquery,Callback,Getjson,我每5秒调用一次下面的函数bellow,从服务器获取数据,它是flask/python。我的问题是,在成功检索数据时,如何调整getjson调用以进行回调 我知道有.done.fail等等,但是我想知道我是否可以保留这个结构并在下面添加它,但是我不知道这个特殊情况下的语法,希望这不会太混乱,谢谢阅读,下面是代码 // get data from the server every getDataFromServerInterval milliseconds var getDataFromServe

我每5秒调用一次下面的函数bellow,从服务器获取数据,它是flask/python。我的问题是,在成功检索数据时,如何调整getjson调用以进行回调

我知道有.done.fail等等,但是我想知道我是否可以保留这个结构并在下面添加它,但是我不知道这个特殊情况下的语法,希望这不会太混乱,谢谢阅读,下面是代码

// get data from the server every getDataFromServerInterval milliseconds
var getDataFromServerInterval = 5000;
function getData(){
  // request timesince table entries from server for user...
  $.getJSON($SCRIPT_ROOT + '/_database', {
    action: "getUserTable_timesince",
    username: $('input[name="username"]').val()
  }, function(data) { // do something with the response data
    timesince_dataBuffer = data;
  });
  return false; // prevent get
}
// get data from the server every getDataFromServerInterval milliseconds
setInterval(getData, getDataFromServerInterval);

我找到了一个部分解决方案,我意识到我可以在处理接收到的数据的函数末尾添加回调,这在某种程度上相当于。在不同的getjson调用结构中完成,我还不确定函数是在接收到数据之前还是之后被调用

// global timesince buffer, holds
var timesince_dataBuffer;

// get data from the server every getDataFromServerInterval milliseconds
var getDataFromServerInterval = 5000;
function getData(){
  // request timesince table entries from server for user
  $.getJSON($SCRIPT_ROOT + '/_database', {
    action: "getUserTable_timesince",
    username: $('input[name="username"]').val()
  }, function(data) { // do something with the response data
    timesince_dataBuffer = data;
    updateEntryStruct(); // the hope is to call this when data is received
  });
  return false; // prevent get
}
// get data from the server every getDataFromServerInterval milliseconds
setInterval(getData, getDataFromServerInterval);

你可以这样做。不要在getData中处理数据或使用回调,而是利用$.getJSON返回的承诺。有一个单独的函数,由调用数据的超时调用,然后对其进行处理。它将您的代码整齐地划分为更易于管理的函数

var getDataFromServerInterval = 5000;

function getData() {
  return $.getJSON($SCRIPT_ROOT + '/_database', {
    action: "getUserTable_timesince",
    username: $('input[name="username"]').val()
  }
}

function wrangleData() {
  getData().then(function (data) {
    console.log(data);
  });
}

setInterval(wrangleData, getDataFromServerInterval);

这就是我想出的解决办法

var timesince_dataBuffer;
function getData(){
  // gets user's entries from sql table
  $.getJSON($SCRIPT_ROOT + '/_database', { // $SCRIPT_ROOT, root to the application
    action: "getUserTable_timesince",
    username: $('input[name="username"]').val()
  }, function(data) { // if a response is sent, this function is called
    timesince_dataBuffer = data;
    updateEntryStruct(); // recreate the structure of each content, buttons etc
  });
  return false;
}
我获取数据,放入一个全局变量,调用另一个函数,该函数获取数据并为接收到的每个对象重新创建一个结构,这样我就不会重新创建结构的静态部分,最重要的是按钮

每1秒调用一个函数,更新动态零件。 已格式化的时间从 事件名称

无论如何,这实际上是我在CS50中的最后一个项目,我首先通过表单提交与服务器通信,每次用户按下按钮时刷新页面,然后通过ajax完成,但我每2秒向服务器发送一次请求,还有没有响应的按钮,因为我会在一个时间间隔内不断地重新创建按钮。 现在这个页面感觉反应灵敏、效率高,这是一次很棒的学习体验

如果有人想查看代码,一切都在这里。

这基本上是一堆随机出现的功能。 现在可以在这里找到该应用程序。

您想如何处理getData中的回调?保留此结构,只需在下面添加:我不清楚。什么意思?你能编辑你的问题来举个例子吗?