2011-07-22 28 views
1

私は2つのjavascript関数を持っています。 validateSearchStirng()私はcheckSolrServerAvailibility()を呼び出しています。それでは、の場合は、Ajaxリクエストが成功した場合はflag=1を返します。しかし、毎回checkSolrServerAvailibility()フラグ= 0を返します。なぜ、どのような私はあなたがこのフラグをfalseに有効にする必要があり、正しい結果にjavascript関数の戻り値に問題があります

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); 

    } 



} 

答えて

1
async : false 

を取得するために行う必要があります。

次に、あなたはおそらく、この方法をJS関数を使用して忘れるべきで望ましい結果

0

を取得し、コールバックを使用してそれを行います。だから、基本的には、代わりにそのようなことをやっての:、

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

checkSolrServerAvailibility(..., processServerFlagCallback); 

checkSolrServerAvailability内部のあなたが成功についての情報を持っているとき、パラメータとして1で与えられたコールバックを呼び出し、そして場合:

serverflag=checkSolrServerAvailibility(...); 

はそのような何かを行いますのエラー - 0をパラメータとしています。

リクエスト中にエラーが発生したと判断する方法については、jQuery's .ajax() documentation on error parameterをご覧ください。あなたは、クライアントがサーバーにAJAX要求を送信した後、自然の中で定義非同期で、あなたのコードが原因で動作しませんAJAXリクエストを処理しているので

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); 
} 

ような何かにあなたのソリューションを再設計する必要が

+0

Tadeck:必要な結果を得るためには、正確に何をする必要があるのか​​詳細を教えてください。 – Romi

+0

@Romi:コールバックの使用方法などの詳細情報が表示されます。 Ryan Dahl氏のプレゼンテーション、Node.jsの紹介:http://youtu.be/jo_B4LTHi3I?t=47m36sこれはアプリケーション(Node.jsはサーバー側で発生します)とは若干異なりますが、基本的な使い方は次のとおりです同一。 – Tadeck

0

サーバの応答が復帰するのを待つことはありません。それは次の行を実行し続けます...つまり、フラグは常にfalseに設定されます。

この問題を解決するには、コールバックメソッドを使用して、示されているように成功と失敗の両方のケースを処理することです。

成功したajaxリクエストの場合は、指定されたパラメータでonAvailabilityCheckメソッドが呼び出され、ajaxリクエストが失敗の場合はonAvailabilityCheckErrorメソッドが呼び出されます。

+0

error.apply(this、arguments)とは何ですか?ここで私が引数として渡す必要があるもの – Romi

+0

'apply'は、一連のパラメータを持つ関数を呼び出すメソッドです。 ref http://www.java-samples.com/showtutorial.php?tutorialid=829 –

+0

'error.apply(this、arguments)'は 'error'メソッドの中で' this'キーワードで 'error'関数を呼び出すことを意味します呼び出し元のメソッドの 'this'キーワードが指す同じオブジェクトを指し、呼び出したメソッドに渡されたパラメータを呼び出したメソッドに同じ順序で渡します。 –

関連する問題