Javascript 主干收集在接收服务器响应时产生错误
我正在为我自己的朋友制作一个twitter客户端,我正在使用Backbone.js和一个使用twitter oAuth API的php后端制作它 下面是一个场景:Javascript 主干收集在接收服务器响应时产生错误,javascript,rest,backbone.js,tweets,Javascript,Rest,Backbone.js,Tweets,我正在为我自己的朋友制作一个twitter客户端,我正在使用Backbone.js和一个使用twitter oAuth API的php后端制作它 下面是一个场景: 用户验证 主干应用程序初始化并发送第一个请求:window.timeline.fetch() window.timeline是一个主干集合,其url为:/connect/timeline/ 服务器以json和window返回10条最近的推文。timeline使用推文模型添加它们,并将最后一条推文id保存在变量中 主干视图渲染和显示它们
window.Tweet = Backbone.Model.extend({});
window.Timeline = Backbone.Collection.extend({
model: Tweet,
url: function(){
var id = (window.lastId) ? window.lastId + "/?" + Math.floor(Math.random()*99999) : "";
return "/connect/timeline/" + id;
}
});
谢谢(对我的英语很抱歉)你当然有比赛条件。如果你发送了两个请求,而服务器的响应速度非常慢,那么你可能会收到两条相同的tweet。我不确定这是否是你的问题,但这肯定是一个选择 鉴于这是问题的根源,您至少有两种解决方案:
- 维护一些标志,指示您是否正在等待服务器响应。这将允许您防止从同一客户端实例同时发送两个请求。注意:这与同步请求不同。后者会阻止你的用户界面李>
- 您还可以检查返回id的tweet是否已经存在,然后再继续。然而,这有点危险,因为它可能会隐藏您的实现中更深层次的问题
/timeline/SOME-ID-HERE
返回所有最新推文,直到给定的ID包含在内。我已经检查了您的应用程序发送的请求的内容。第一个/timeline
很长,以id119912841942802432
结尾。这是第二个请求中返回的唯一id
我不明白的是,地址中的ID与你推特的ID有什么关系。第二个请求地址是
/timeline/119912841942802430
。另一方面,119912841942802430
与结果中的任何内容都不匹配<代码>119912841942802432(注意结尾处的2
而不是0
)确实如此。你当然有比赛条件。如果你发送了两个请求,而服务器的响应速度非常慢,那么你可能会收到两条相同的tweet。我不确定这是否是你的问题,但这肯定是一个选择
鉴于这是问题的根源,您至少有两种解决方案:
- 维护一些标志,指示您是否正在等待服务器响应。这将允许您防止从同一客户端实例同时发送两个请求。注意:这与同步请求不同。后者会阻止你的用户界面李>
- 您还可以检查返回id的tweet是否已经存在,然后再继续。然而,这有点危险,因为它可能会隐藏您的实现中更深层次的问题
/timeline/SOME-ID-HERE
返回所有最新推文,直到给定的ID包含在内。我已经检查了您的应用程序发送的请求的内容。第一个/timeline
很长,以id119912841942802432
结尾。这是第二个请求中返回的唯一id
我不明白的是,地址中的ID与你推特的ID有什么关系。第二个请求地址是
/timeline/119912841942802430
。另一方面,119912841942802430
与结果中的任何内容都不匹配119912841942802432
(注意结尾处的2
而不是0
)确实如此。我添加了一个计时器类,在发送新请求时暂停它,在请求完成时恢复它(成功回调)。不是这样的。我已经向您提供了源代码:@SallarKaboli好的,我会尝试深入挖掘。@SallarKaboli您有这个Timer.js脚本的未压缩源代码吗?没有,抱歉:(它有四个主要方法:开始、停止、暂停、恢复。不过这里有一个美化的版本:那么我应该在将这个特定对象发送回客户端之前从结果中删除它吗?比如,$v->id=$sinceId)继续;如果是,我现在就编辑代码,看看会发生什么。谢谢。我添加了一个计时器类,在发送新请求时暂停它,在请求完成时恢复它(成功回调)。不是这样。我已经向您提供了源代码:@SallarKaboli好的,我会尝试深入挖掘。@SallarKaboli您有这个Timer.js脚本的未压缩源代码吗?没有,抱歉:(它有四个主要方法:开始、停止、暂停、恢复。不过这里有一个美化的版本:那么我应该在将结果发送回客户端之前从结果中删除这个特定对象吗?比如如果($v->id==$sinceId)继续;如果是,我现在就编辑代码,看看会发生什么。谢谢。