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