2011-07-22 70 views
1

面對我有兩個JavaScript函數。從validateSearchStirng()我打電話checkSolrServerAvailibility(),從中我期待重返flag=1如果AJAX請求成功,否則flag=0。但每次checkSolrServerAvailibility()返回標誌= 0。爲什麼會這樣,我需要爲獲得正確的結果問題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 

你應該把這個標誌設置爲false做什麼。

然後你會得到想要的結果

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

+0

Tadeck:請您多我究竟需要做什麼來獲得所需的結果闡述它。 – Romi

+0

@Romi:你可以看到更多的信息如何使用回調例如。瑞恩·達爾的介紹,並介紹了Node.js的範圍內:http://youtu.be/jo_B4LTHi3I?t=47m36s雖然這東西從你的應用程序(Node.js的發生在服務器端)略有不同,基本的用法相同。 – Tadeck

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方法。

+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'關鍵字所指向的同一對象,並將傳遞給調用方法的參數以相同順序傳遞給調用方法。 –