Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 具有链式AJAX调用的条件逻辑_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 具有链式AJAX调用的条件逻辑

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

我有一个页面,可以从多个保存的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,失败和总是方法对我来说是不存在的,因为你没有在你的代码中提供它们。。。