Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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
如何以同步方式运行2个Javascript块_Javascript_Jquery - Fatal编程技术网

如何以同步方式运行2个Javascript块

如何以同步方式运行2个Javascript块,javascript,jquery,Javascript,Jquery,我遇到了一个场景,我需要在下面的场景中运行。我已经准备好了我的代码,只需要同步执行两个javascript块 var baseQuery ='test'; var mainQuery ='test'; if(baseQuery!='') { //Ajax call } if(mainQuery!='') { //Ajax Call } 如何确保第二个代码块在第一次完成执行后运行。第一个ajax调用成功后,您可以像这样运行第二个代码块 var baseQuery ='test'; va

我遇到了一个场景,我需要在下面的场景中运行。我已经准备好了我的代码,只需要同步执行两个javascript块

var baseQuery ='test';
var mainQuery ='test';
if(baseQuery!='')
{
  //Ajax call
}

if(mainQuery!='')
{
  //Ajax Call
}

如何确保第二个代码块在第一次完成执行后运行。

第一个ajax调用成功后,您可以像这样运行第二个代码块

var baseQuery ='test';
var mainQuery ='test';
var bool=false;
if(baseQuery!='')
{
  //Ajax call
 //Ajax success (bool=true;)
}
if(mainQuery!='' && bool ==true)
{
  //Ajax Call
}

var baseQuery ='test';
var mainQuery ='test';
var bool=false;
if(baseQuery!='')
{
  //Ajax call
 //Ajax success (if(mainQuery!=''))
}
if(baseQuery!='')
{
     $.ajax({
        type: "POST",
        url: url,                    
        beforeSend: function (xhr) {                       
        },
        success: function (data) {
            if(mainQuery!='')
            {
               //Ajax Call
              $.ajax({
              });
            }
        }
    });
}

这取决于用于实现AJAX的库。但是,AJAX调用通常使用承诺,因此您只需要在第一个AJAX请求的解析块上调用第二个函数

例如,如果您使用的是jQuery,下面是您可以使用的方法:

$.ajax({
        url: API_URL + "/endpoint",
        method: "GET"
    }).done(function (data) { //This happens after the AJAX promise has resolved
        //call second block here
    })
    .fail(function(e){ //This block is called in case of error in AJAX query
        console.log(e);
    });
})

编辑:这个ajax查询包含在if(baseQuery!=''){}中,一种方法是使用承诺,并在第一次ajax调用成功时解决它

var defer = $.Deferred();
var baseQuery ='test';
var mainQuery ='test';
if(baseQuery!='')
{
  //resolve the promise in the success of first ajax call
  defer.resolve(...) // do it inside your success handler in error you can reject
}

if(mainQuery!='')
{
    defer.promise().then(function(data){
         //this will execute after complete of first ajax call;
    })
}
您可以将逻辑放入第二个块的成功处理程序中,并在内部检查
mainQuery!=''

快乐编码:)

看看$q,问题是两个查询都可以是空的,所以不能将其放在第一个查询的成功块中。因为假设如果第一个条件为false,那么它也不会执行第二个条件,那么您所要做的就是在第一个if之后写一个else语句,然后在它里面写第二个块,这样要么您首先执行第一个块并在AJAX成功中调用第二个,要么您不执行第一个块代码并直接运行第二个块。