Angular $ http获取数据更改的api

时间:2016-07-11 07:46:13

标签: javascript angularjs django-rest-framework

我在我的网站上使用DRF和AngularJS。我提出了一个简单的请求,如 -

$http({
method: "GET",
url: "http://127.0.0.1:8000/api/sendeop",
  }).then(function success(response) {

    //some processing on the data returned

}, function error(response) {});

现在,如果数据库中的数据发生变化,则不会反映在angularJS上,因为这只会在加载时生成一次请求。如何观察数据变化的api并在angularJS中处理它?<​​/ p>

我不太确定$watch$digest是否解决了我的问题,但如果他们这样做了,我该如何使用它们?

3 个答案:

答案 0 :(得分:3)

从您的问题陈述中我理解以下内容:

  1. 你有一个后端数据库。服务器端/中间件查询数据库并将数据发送到前端。
  2. 使用Angular JS的客户端/前端正在接受来自服务器端的数据并在屏幕中使用它。
  3. 您想要检查后端数据库中的数据是否已更改,如果更改了您希望客户端请求数据并刷新屏幕内容。
  4. 如果上述理解是正确的,那么我建议如下:

    (用于捕获单行数据的更改)

    1. 在表中存储数据的表中添加tsChanged(TimeStamp for changed data)列。
    2. 每次更新查询都会更新该行的tsChanged字段。
    3. 当数据首次发送到客户端时,该状态的tsChanged也会发送给客户端。
    4. 在服务器端创建一个service(比如updateCheckerService),用于比较tsChanged值(数据库中当前tsChangedtsChanged之间的值Select从客户端发送的)。轻量级$interval查询即可。
    5. 使用updateCheckerService点击tsChanged,然后传递客户端已存在的true
    6. 如果服务器响应tsChanged(表示数据已更改),则再次调用数据加载服务。
    7. (用于捕获多行数据的变化)

      1. 在表格中添加Update列,该列将数据存储在数据库中。
      2. 每个tsChanged查询都会更新该行的tsChanged字段。
      3. 当数据首次发送到客户端时,updateCheckerService最高值会发送到客户端。
      4. 在服务器端创建一个服务(比如tsChanged),用于比较tsChanged值(数据库中当前最高 tsChangedSelect之间的值从客户端发送的)。轻量级$interval查询即可。
      5. 使用updateCheckerService点击tsChanged,然后传递客户端已存在的true
      6. 如果服务器响应<input type=submit name="name_here" value ="<?php echo $row['Sl_no']; ?>" > (表示数据已更改),则再次调用数据加载服务。
      7. 优点:

        由于客户端数据加载服务昂贵且繁重,因此只有在确定数据库中的数据发生更改时才最好调用。 为了确保数据发生变化,我们正在使用轻量级服务,从而有效地使过程变得更轻。

        希望它有所帮助!

答案 1 :(得分:1)

欢迎你错了,angular js只是客户端脚本语言, 如果您想跟踪数据库中的更改并希望显示更新的数据。

  1. 你需要帮助中间件(即socket.io)或
  2. 您可以使用 webworkers进行ajax poling ,这会在每个确定的时间间隔内对您的服务器进行连续的http调用,或者
  3. 您可以使用任何第三方(即firebase或PubNub)库。

答案 2 :(得分:0)

您可以实施通知系统(请参阅Amazon SQS或SNS),或者如@str所述,您可以实施实时呼叫(请参阅ajax long polling,websockets)。