Javascript 具有链式AJAX调用的条件逻辑
我有一个页面,可以从多个保存的Instagram提要加载帖子。提要对象如下所示:Javascript 具有链式AJAX调用的条件逻辑,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个页面,可以从多个保存的Instagram提要加载帖子。提要对象如下所示: {'feed_type' : 'search', 'feed_term' : '#cars'} {'feed_type' : 'profile', 'feed_term' : 'FerrariOfficial'} function getInstagramIdFromUsername(){ return $.ajax({ url:"api/" }); } 如果提要与Instagram
{'feed_type' : 'search', 'feed_term' : '#cars'}
{'feed_type' : 'profile', 'feed_term' : 'FerrariOfficial'}
function getInstagramIdFromUsername(){
return $.ajax({
url:"api/"
});
}
如果提要与Instagram配置文件而不是哈希标记相关,我们需要首先查询Instagram API中该用户名的ID(因为Instagram不允许按用户名查询)
页面上还有一个表单可以添加新的提要,我想在添加提要后重用这些检查和显示方法
我有以下职能:
getInstagramIdFromUsername()
displayPosts()
addNewFeed()
理想情况下,这将是主要逻辑:
onLoad() {
// for each feed...
if (f.feed_type == "profile") {
getInstagramIdFromUsername(f);
}
displayPosts(f);
}
onAddFeedFormSubmitted(f) {
if (f.feed_type == "profile") {
getInstagramIdFromUsername(f);
}
addNewFeed(f);
displayPosts(f);
}
然而,由于所有这些函数都是异步AJAX调用,因此我在构建逻辑时遇到了问题。最好的方法是什么?我应该在这里使用jQuery吗?如果函数是异步的,那么应该添加回调功能
getInstagramIdFromUsername(callback)
在获取提要后回调get execute,因此您可以这样做:
onLoad() {
if (feed_type == "profile") {
getInstagramIdFromUsername(function() {displayPosts();});
} else {
displayPosts();
}
}
如果函数是异步的,则应添加回调功能
getInstagramIdFromUsername(callback)
在获取提要后回调get execute,因此您可以这样做:
onLoad() {
if (feed_type == "profile") {
getInstagramIdFromUsername(function() {displayPosts();});
} else {
displayPosts();
}
}
您只需返回$.ajax函数返回的对象即可。它是一个延迟对象:
onLoad() {
// for each feed...
if (f.feed_type == "profile") {
getInstagramIdFromUsername(f).done(function(data){
displayPosts(f);
});
}else{
displayPosts(f);
}
}
onAddFeedFormSubmitted(f) {
if (f.feed_type == "profile") {
getInstagramIdFromUsername(f).done(function(data){
addNewFeed(f);
displayPosts(f);
});
}else{
}
}
因此,getInstagramFromUsername函数如下所示:
{'feed_type' : 'search', 'feed_term' : '#cars'}
{'feed_type' : 'profile', 'feed_term' : 'FerrariOfficial'}
function getInstagramIdFromUsername(){
return $.ajax({
url:"api/"
});
}
您可以使用自定义数据类型实现更高级的行为。查看一下您可以简单地返回由$.ajax函数返回的对象。它是一个延迟对象:
onLoad() {
// for each feed...
if (f.feed_type == "profile") {
getInstagramIdFromUsername(f).done(function(data){
displayPosts(f);
});
}else{
displayPosts(f);
}
}
onAddFeedFormSubmitted(f) {
if (f.feed_type == "profile") {
getInstagramIdFromUsername(f).done(function(data){
addNewFeed(f);
displayPosts(f);
});
}else{
}
}
因此,getInstagramFromUsername函数如下所示:
{'feed_type' : 'search', 'feed_term' : '#cars'}
{'feed_type' : 'profile', 'feed_term' : 'FerrariOfficial'}
function getInstagramIdFromUsername(){
return $.ajax({
url:"api/"
});
}
您可以使用自定义数据类型实现更高级的行为。查看一下您能提供JSON格式的数据吗?=>是js中的箭头函数。。。另外,onLoad()必须位于类中,或者是语法错误(缺少函数),而且您不需要延迟对象,您可以简单地使用Promissions等链接ajax调用。谢谢-刚刚更改为JSON格式。@Jonasw如果您能告诉我如何使用Promissions来做这件事,这将非常有帮助。您能提供JSON格式的数据吗?=>是js中的箭头函数。。。另外,onLoad()必须在类中,或者是语法错误(缺少函数),而且您不需要延迟对象,您可以使用承诺等简单地链接ajax调用。谢谢-刚刚更改为JSON格式。@Jonasw,如果您能告诉我如何使用承诺,这将非常有帮助。如果我按照您的建议使用.done(),我定义的现有done、fail和always方法会发生什么情况?@Seano existing done、fail和always方法对我来说不存在,因为你没有在你的代码中提供它们……如果我按照你的建议使用.done(),那么我定义的现有done、fail和always方法会发生什么情况?@Seano existing done,失败和总是方法对我来说是不存在的,因为你没有在你的代码中提供它们。。。