javascript函数返回值时面临的问题

javascript函数返回值时面临的问题,javascript,ajax,Javascript,Ajax,我有两个javascript函数。我正在从validateSearchStirng()调用checkSolrServerAvailability(),如果ajax请求成功,我希望从中返回flag=1,否则flag=0。但是每次检查SolrServerAvailability()返回标志=0。为什么会这样?我需要做什么才能得到正确的结果 function validateSearchStirng(sort,order,itemPerPage,showPage) { va

我有两个javascript函数。我正在从
validateSearchStirng()
调用
checkSolrServerAvailability()
,如果ajax请求成功,我希望从中返回
flag=1
,否则
flag=0
。但是每次
检查SolrServerAvailability()
返回标志=0。为什么会这样?我需要做什么才能得到正确的结果

 function validateSearchStirng(sort,order,itemPerPage,showPage)
    {
         var serverflag;
serverflag=checkSolrServerAvailibility(sort,order,itemPerPage,showPage,query,solrURL);
         if(serverflag==0)
         {
        var msg= "<hr /><font size="+size+" ><b>Solr Server Not Runing </b></font><hr /> ";
        removeList();
        $("#result").html(msg); 
         }  
         if(serverflag==1)
         {
           getSolrResponse(sort,order,itemPerPage,showPage,query,solrURL);  
         }

    }


 function checkSolrServerAvailibility(sort,order,itemPerPage,showPage,query,solrURL)
    {
        var start=itemPerPage*(showPage-1);
        var end=itemPerPage;
        var flag=0
        $.ajax({
            url: solrURL+"/solr/db/select/?qt=dismax&wt=json&&start="+start+"&      rows="+end+"&q="+query+"&json.wrf=?",
            async:true,
            dataType: 'json',
            success: function(json){
            flag=1;
                return(flag);
            }
        })
       return(flag);

    }



} 
函数validateSearchStirng(排序、顺序、项目每页、显示页)
{
var-serverflag;
serverflag=CheckSolrServerAvailability(排序、顺序、itemPerPage、showPage、查询、solrURL);
if(serverflag==0)
{
var msg=“
Solr服务器未运行
”; removeList(); $(“#结果”).html(msg); } if(serverflag==1) { getSolrResponse(排序、顺序、itemPerPage、showPage、查询、solrURL); } } 函数检查SolrServerAvailability(排序、顺序、itemPerPage、showPage、查询、solrURL) { var start=itemPerPage*(显示第1页); var end=itemPerPage; var标志=0 $.ajax({ url:solrURL+“/solr/db/select/?qt=dismax&wt=json&&start=“+start+”&rows=“+end+”&q=“+query+”&json.wrf=?”, async:true, 数据类型:“json”, 成功:函数(json){ flag=1; 返回(标志); } }) 返回(标志); } }
您应该将此标志设置为false

然后你会得到想要的结果

您应该将此标志设置为false


然后您将获得所需的结果

您可能应该忘记以这种方式使用JS函数,而使用回调函数。因此,基本上不是这样做:

serverflag=checkSolrServerAvailibility(...);
var processServerFlagCallback = function(flag){
    // do something with your flag
}

checkSolrServerAvailibility(..., processServerFlagCallback);
这样做:

serverflag=checkSolrServerAvailibility(...);
var processServerFlagCallback = function(flag){
    // do something with your flag
}

checkSolrServerAvailibility(..., processServerFlagCallback);
checkSolrServerAvailability
中,当您有关于成功的信息时,使用
1
作为参数调用给定的回调,如果出现错误,则使用
0
作为参数


要了解如何确定请求过程中发生的错误,请参阅。

您可能应该忘记以这种方式使用JS函数,而使用回调函数。因此,基本上不是这样做:

serverflag=checkSolrServerAvailibility(...);
var processServerFlagCallback = function(flag){
    // do something with your flag
}

checkSolrServerAvailibility(..., processServerFlagCallback);
这样做:

serverflag=checkSolrServerAvailibility(...);
var processServerFlagCallback = function(flag){
    // do something with your flag
}

checkSolrServerAvailibility(..., processServerFlagCallback);
checkSolrServerAvailability
中,当您有关于成功的信息时,使用
1
作为参数调用给定的回调,如果出现错误,则使用
0
作为参数


要了解如何确定请求过程中发生的错误,请参阅。

您需要重新设计解决方案,使其类似于

function checkSolrServerAvailibility(sort,order,itemPerPage,showPage,query,solrURL, success, error){
     $.ajax({
            url: "",
            dataType: 'json',

            success: function(json){
                success.apply(this, arguments);
            },
            error:function(){
                error.apply(this, arguments);
            }
        })
}

function onAvailabilityCheck(json, textStatus, jqXHR){
    getSolrResponse(sort,order,itemPerPage,showPage,query,solrURL);  
}

function onAvailabilityCheckError(jqXHR, textStatus, errorThrown){
    var msg= "<hr /><font size="+size+" ><b>Solr Server Not Runing </b></font><hr /> ";
    removeList();
    $("#result").html(msg); 
}

function validateSearchStirng(sort,order,itemPerPage,showPage){
         checkSolrServerAvailibility(sort,order,itemPerPage,showPage,query,solrURL, onAvailabilityCheck, onAvailabilityCheckError);
}
函数检查SolrServerAvailability(排序、顺序、itemPerPage、showPage、查询、solrURL、成功、错误){
$.ajax({
url:“”,
数据类型:“json”,
成功:函数(json){
成功。应用(这个,论点);
},
错误:函数(){
错误。应用(此,参数);
}
})
}
函数onAvailabilityCheck(json、textStatus、jqXHR){
getSolrResponse(排序、顺序、itemPerPage、showPage、查询、solrURL);
}
函数onAvailabilityCheckError(jqXHR、textStatus、errorSprown){
var msg=“
Solr服务器未运行
”; removeList(); $(“#结果”).html(msg); } 函数validateSearchStirng(排序、顺序、itemPerPage、showPage){ 检查SolrServerAvailability(排序、顺序、每页项目数、显示页、查询、solrURL、onAvailabilityCheck、OnAvailabilityChecker); }
由于您使用的是ajax请求,根据定义,它本质上是异步的,因此您的代码将无法工作,因为一旦客户机将ajax请求发送到服务器,它就不会等待服务器响应返回。它将继续执行下一行。。。这意味着您的标志将始终设置为false

为了解决这个问题,我的建议是使用回调方法来处理成功和失败案例,如图所示


如果ajax请求成功,将使用给定的参数调用
onAvailabilityCheck
方法,如果ajax请求失败,将调用
OnAvailabilityChecker
方法。

您需要重新设计解决方案,使其类似于

function checkSolrServerAvailibility(sort,order,itemPerPage,showPage,query,solrURL, success, error){
     $.ajax({
            url: "",
            dataType: 'json',

            success: function(json){
                success.apply(this, arguments);
            },
            error:function(){
                error.apply(this, arguments);
            }
        })
}

function onAvailabilityCheck(json, textStatus, jqXHR){
    getSolrResponse(sort,order,itemPerPage,showPage,query,solrURL);  
}

function onAvailabilityCheckError(jqXHR, textStatus, errorThrown){
    var msg= "<hr /><font size="+size+" ><b>Solr Server Not Runing </b></font><hr /> ";
    removeList();
    $("#result").html(msg); 
}

function validateSearchStirng(sort,order,itemPerPage,showPage){
         checkSolrServerAvailibility(sort,order,itemPerPage,showPage,query,solrURL, onAvailabilityCheck, onAvailabilityCheckError);
}
函数检查SolrServerAvailability(排序、顺序、itemPerPage、showPage、查询、solrURL、成功、错误){
$.ajax({
url:“”,
数据类型:“json”,
成功:函数(json){
成功。应用(这个,论点);
},
错误:函数(){
错误。应用(此,参数);
}
})
}
函数onAvailabilityCheck(json、textStatus、jqXHR){
getSolrResponse(排序、顺序、itemPerPage、showPage、查询、solrURL);
}
函数onAvailabilityCheckError(jqXHR、textStatus、errorSprown){
var msg=“
Solr服务器未运行
”; removeList(); $(“#结果”).html(msg); } 函数validateSearchStirng(排序、顺序、itemPerPage、showPage){ 检查SolrServerAvailability(排序、顺序、每页项目数、显示页、查询、solrURL、onAvailabilityCheck、OnAvailabilityChecker); }
由于您使用的是ajax请求,根据定义,它本质上是异步的,因此您的代码将无法工作,因为一旦客户机将ajax请求发送到服务器,它就不会等待服务器响应返回。它将继续执行下一行。。。这意味着您的标志将始终设置为false

为了解决这个问题,我的建议是使用回调方法来处理成功和失败案例,如图所示


如果ajax请求成功,将使用给定参数调用
onAvailabilityCheck
方法,如果ajax请求失败,将调用
OnAvailabilityChecker
方法。

什么是错误。应用(这是参数);在这里,我需要作为参数
apply
传递的是使用一组参数调用函数的方法。ref`error.apply(this,arguments)`表示