我有两个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);
}
}
答案 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
方法。