[英]making ajax request in meteor helpers
在将数据返回到meteor helpers方法时,我怎么能等到ajax请求完成。
例如,
Template.item.helpers({
itemName:function () {
var user = Meteor.user();
$.when(reallyLongAjaxRequest()).done(function (a1) {
//tried using jquery when
return "Item Name should have this because it waited";
});
return " Doesnt wait at all";
}
});
我有一个reallyLongAjaxRequest()
运行,我想在继续我的itemName帮助之前完成它。 控制台的日志语句始终显示未定义,但这是因为ajax请求尚未完成。 我没有运气时尝试使用jquery。 有任何想法吗
编辑:
我应该提一下,我在辅助函数中是有原因的。 我需要呈现项目'id',以便我可以使用该参数运行ajax请求。 使用被动会话将是完美的,但我不知道如何获得当前渲染项目在助手方法定义之外?
未命名的集合是为名称传递null
集合。 它是内存中的数据结构,不保存到数据库中。 ( http://docs.meteor.com/#meteor_collection )
好的,给定一个名为“items”的Meteor集合,并希望根据项目_id对每个项目执行ajax请求,然后能够在模板中引用ajax结果,这就是我要做的:
(大致)
var Items = new Meteor.Collection('items');
var Results = new Meteor.Collection(null);
Items.find().observeChanges({
added: function (id) {
$.get(url, {id: id}, function (data) {
if (Results.findOne(id))
Results.update(id, {$set: {result: data}});
else
Results.insert({_id: id, result: data});
});
}
});
Template.item.itemName = function (id) {
var doc = Results.findOne(id);
if (doc)
return doc.result;
else
return "";
};
在您的HTML中,您需要将id传递给帮助者:
{{itemName _id}}
在定义帮助程序时,没有办法只是暂停几秒钟,以便我的ajax请求完成而不立即返回。
不,随着反应式编程事情立即发生,但是当你有新东西时你会更新。
单独制作ajax请求,完成后,将结果存储在Session变量中。 然后让模板助手返回Session变量的值。 大致...
$.get(url, function (data) {
Session.set('result', data);
});
Template.item.itemName = function () {
return Session.get('result');
};
Session是一个被动数据源,因此当ajax调用的结果进入时,你的模板会自动更新。(当然你可以选择调用你想要的Session变量,我只是以“结果”为例)。
这在MeteorJS> 1.3.x中工作和测试
从控制台meteor add http
添加http包
示例POST调用,将数据元素发送到服务器并使用自定义标头。
HTTP.call('POST', tokenUri, {
data: {
"type": 'authorization_code',
//"client_id": clientId,
"code": code,
"redirect_uri" : redirectUri,
},
headers: {
"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS,POST,PUT",
"Access-Control-Allow-Headers" : "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers",
}
},function(error, response) {
if ( error ) {
console.log( error );
} else {
console.log( response );
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.