我有一个Flask Python服务器,它使用CeleryOnce工作程序根据用户的查询收集和格式化一些数据。我有一个用EmberJS CLI 2.5创建的页面,它需要将该查询发送到我的Flask服务器,并轮询我的服务器以检索CeleryOnce工作程序的当前状态。我在这里的主要观点是,我使用的是EmberJS CLI中默认生成的文件,但我没有使用默认的Ember CLI数据源。
有人能告诉我如何用ajax查询中的数据更新ember-js页面吗?或者让我的控制器轮询数据并将其传递到组件中,而不刷新页面?看起来Ember Data假设服务器和页面在同一个端口/URL/机器上,但在我的情况下并非如此。(或者应该是?)
我已经在我的EmberJs项目中设置了所有的构建块,并且我的Flask项目中的所有数据都可以作为JSON提供,但我似乎无法将两者连接在一起。
遗憾的是,我在谷歌上搜索的结果都是旧版本的EmberJS,它似乎不再适用于当前版本。
虽然我接受了这个答案,但我不得不进行修改以正确设置var:
request() {
var comp = this;
Ember.$.getJSON('http://localhost:5000/api/v1.0/', 'GET').then(function(tasks) {
comp.set('tasks',tasks);
});
有人能给我指明正确的方向吗从我的ember js页面调用我的python服务器来提取数据像ajax查询?
值得一提的是,轮询是一个网络/数据/模型层的问题——轮询不应该与模板耦合,或者如何在页面上显示数据。
Ember提供了一些内置的API,可以帮助进行轮询。除此之外,在Ember中轮询服务器与在任何其他Javascript应用程序中都没有什么不同。任何类型的轮询解决方案最终都将涉及在不同的时间,按照某种时间表发出AJAX请求。
我建议从Ember.run.later开始。如果你觉得更有野心,你也可以看看Ember并发插件。
最简单的解决方案可能是这样的:
import Ember from 'ember';
export default Ember.Component.extend({ // Or Ember.Controller.extend({ ...
setupPolling: Ember.on('init', function() {
this.pollRequest();
}),
pollRequest() {
this.request();
Ember.run.later(this, this.pollRequest, 100);
},
request() {
// Do your AJAX / Ember Data call here. Set the results of the call on your Component so you can render it in your template. The template will update automatically when the data changes.
},
});
你的答案中有几个不同的问题(例如关于CORS)。试着把这些问题分解成单独的问题——这会让其他SO用户更容易回答,你也会得到更好的回答率。此外,尽量不要让你的问题过于具体。如果您想了解Ember中的轮询,可能不需要指定您在后端使用的服务器类型。