проблема, возникающая в функции возврата JavaScript, возвращающей значение - PullRequest
1 голос
/ 22 июля 2011

У меня есть две функции JavaScript. с validateSearchStirng() я звоню checkSolrServerAvailibility(), с которого я ожидаю возврата flag=1, если запрос ajax успешен, в противном случае flag=0. но каждый раз checkSolrServerAvailibility() флаг возврата = 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 ]

1 голос
/ 22 июля 2011
async : false

Вы должны установить этот флаг на false.

Тогда вы получите желаемый результат

0 голосов
/ 22 июля 2011

Вам нужно изменить свое решение на что-то вроде

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.

0 голосов
/ 22 июля 2011

Вероятно, вы должны забыть об использовании функций JS таким образом и делать это с помощью обратных вызовов. Так что в основном вместо того, чтобы делать что-то подобное:

serverflag=checkSolrServerAvailibility(...);

сделать что-то подобное:

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

checkSolrServerAvailibility(..., processServerFlagCallback);

и внутри checkSolrServerAvailability, когда у вас есть информация об успехе, вызовите данный обратный вызов с 1 в качестве параметра, а в случае ошибки - с 0 в качестве параметра.

Чтобы узнать, как определить, что во время запроса произошла ошибка, см. Документацию .ajax () jQuery по error параметру .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...