Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS根据GET请求将新项目推送到数组_Javascript_Ajax_Angularjs_Ionic Framework - Fatal编程技术网

Javascript AngularJS根据GET请求将新项目推送到数组

Javascript AngularJS根据GET请求将新项目推送到数组,javascript,ajax,angularjs,ionic-framework,Javascript,Ajax,Angularjs,Ionic Framework,我正在使用ionic框架在我的应用程序上实现通知功能。它的工作方式是向RESTAPI发出get请求,该api返回一个通知数组。但这似乎太过分了,因为我每次都必须向同一个列表发出请求,所以我考虑将第一个请求存储在局部变量中(使用ngStorage),然后在下一个请求中调出新项。。这个解决方案可行吗?如果是的话,你能举例说明怎么做吗 /*示例1第一个Json请求,我将把列表存储在$localStorage变量中*/ [{id:1, notification:'notif A'}, {id:2, no

我正在使用ionic框架在我的应用程序上实现通知功能。它的工作方式是向RESTAPI发出get请求,该api返回一个通知数组。但这似乎太过分了,因为我每次都必须向同一个列表发出请求,所以我考虑将第一个请求存储在局部变量中(使用ngStorage),然后在下一个请求中调出新项。。这个解决方案可行吗?如果是的话,你能举例说明怎么做吗

/*示例1第一个Json请求,我将把列表存储在$localStorage变量中*/

[{id:1, notification:'notif A'},
{id:2, notification:'notif B'}]
/*对于第二个请求,我只想将get'id:3'推送到我的$localStorage。这怎么可能*/

[{id:1, notification:'notif A'},
{id:2, notification:'notif B'},
{id:3, notification:'notif C'}]

最好让服务器只向您传递新通知,前提是您可以在请求中传递一些信息,说明您已经拥有的最新通知是什么(例如,您的请求可以包含一个查询参数,如
last\u id=
,您的服务器使用该参数筛选旧的或比旧的通知;这假设
id
的值与通知期限相关;还有其他服务器端解决方案)

如果你不能控制服务器,最快的方法就是用新的列表替换整个列表。我不认为找到增量并添加它们会有什么好处

但是,如果您出于其他原因需要增量(例如,您需要根据每个新通知的内容对其运行某些操作),则一个选项是将通知存储为对象而不是数组:

// notifications are keyed by ID
var notifications = {};

// load notifications from storage if needed

// newList is the array of new notifications
// newNotificationFcn is an optional callback function, which
// takes the new notification as its only argument
function updateNotifications(newList, newNotificationFcn) {
  var doNotify = (typeof newNotificationFcn === 'function');
  newList.forEach(function(curr) {
    if (!notifications.hasOwnProperty(curr.id) {
      // this is a new notification; do something
      if (doNotify) {
        newNotificationFcn(curr);
      }
      notifications[curr.id] = curr;
    }
  });

  // store away notifications as needed
}

但是,只有在您确实需要为这些增量做些什么的情况下,才可以这样做;如果您所需要做的只是使列表保持最新,只需替换旧的列表。

您是否可以控制响应您请求的服务器?例如,您能否在第二个请求中传递一个
…?最后一个\u id=2…
,并依赖于服务器仅返回新通知(即
{id:3,…}
)?如果您必须发出请求并检索所有数据,则没有区别…我通过Rest api的设置方式理解您的观点..通知/:开始/:结束………开始和结束是最后一个@Link64中的第一个到最后一个,您可以在服务器上使用分页并获取您尚未拥有的项。如果服务器不支持分页您可以在存储的数据和检索到的数据之间进行数组差异,如下所述(不确定为什么这样做会有帮助,因为您获得了所有数据)