javascript函数返回值面临的问题

时间:2011-07-22 10:15:33

标签: javascript ajax

我有两个javascript函数。来自validateSearchStirng()我正在调用checkSolrServerAvailibility(),如果ajax请求成功,我希望返回flag=1 flag=0。但每次checkSolrServerAvailibility()返回flag = 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);

    }



} 

3 个答案:

答案 0 :(得分:1)

async : false

您应该将此标志设为false。

然后您将获得所需的结果

答案 1 :(得分:0)

您应该忘记以这种方式使用JS函数并使用回调来完成它。所以基本上不是做那样的事情:

serverflag=checkSolrServerAvailibility(...);

做类似的事情:

var processServerFlagCallback = function(flag){
    // do something with your flag
}

checkSolrServerAvailibility(..., processServerFlagCallback);

checkSolrServerAvailability内部,当您获得有关成功的信息时,请使用1作为参数调用给定的回调,如果出现错误,则以0作为参数。

要了解如何确定请求期间发生错误,请参阅jQuery's .ajax() documentation on error parameter

答案 2 :(得分: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);
}

由于您正在处理ajax请求,根据定义本质上是异步的,您的代码将无法工作,因为一旦客户端将ajax请求发送到服务器,它将不会等待服务器响应返回。它将继续执行下一行...这意味着你的标志将始终设置为false。

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

在成功的ajax请求的情况下,将使用给定的参数调用onAvailabilityCheck方法,如果ajax请求失败,则将调用onAvailabilityCheckError方法。