2013-07-18 74 views
1

我有一個輸入字段,用戶可以輸入一個INPUTVALUE,這個INPUTVALUE被檢查是否對reg-ex的正確性,然後發送到一個php文件,該文件將對它進行計算,並返回0(意思是INPUTVALUE無效)或RETURNVALUE。這個RETURNVALUE應顯示在網站上的一個元素,ID爲#VALUEINFO。我也希望這個RETURNVALUE由我的功能get_value_by_input()返回。爲了檢查返回的內容,我首先顯示警報。JavaScript變量作用域 - 我如何解決這個問題?

(這樣做的一個實際應用可能是例如,訂單中的優惠券代碼......把你的優惠券代碼,我們檢查它在數據庫中,它返回優惠券的價值或者0,如果它不是一個有效的優惠券代碼。)

我的問題是,我必須搞亂了Javascript中的變量範圍,因爲儘管我的#VALUEINFO顯示正確的RETURNVALUE,但警報總是會說no returnvalue specified

function get_value_by_input() 
{ 
    var returnvalue; 
    var valueinfo = $('#valueinfo'); 
    valueinfo.text(''); 
    var inputvalue = $("input[name='inputvalue']").val(); 
    var correctinput = /^[a-zA-Z]*$/i; 
    if(inputvalue.length > 0 && correctinput.test(inputvalue)) 
    { 
     $.post('ajax/valuecheck.php', {inputvalue_test: inputvalue}, function(is_valid){ 
      if(is_valid == 0) 
      { 
         valueinfo.text('Sorry, this input is not working...'); 
         returnvalue = 0; 
      } 
      if(is_valid != 0) 
      { 
         valueinfo.text('the returned value for your input is '+is_valid); 
         returnvalue = is_valid; 
      } 
     }); 
    } 
    else 
    { 
     if(inputvalue) 
     { 
      valueinfo.text('Invalid input.'); 
      returnvalue = 0; 
     } 
    } 

    if(returnvalue) 
    { 
     alert('the value for this input was was '+returnvalue); 
     return returnvalue; 
    } 
    else 
    { 
     alert('no returnvalue specified.'); 
     return 0; 
    } 
} 

還是那句話: 爲什麼這段代碼時刻警惕「無返回值規定」 eventhough #VALUEINFO給了我正確的返回值?

我認爲這與if塊有關,我讀到javascript不會忽略if塊內任何變量的設置,即使條件未滿足也是如此......但是,我還能如何傳遞值到#valueinfo並同時返回它? 任何幫助或建議將不勝感激! :-)

編輯:

嗯,是的它無關變量的作用域,但它是關於Asynchronus-JAX。 我最終重組我的代碼... get_value_by_input()現在更多是一個process_input()函數。首先檢查INPUTVALUE是否正確,並且僅在沒有錯誤時調用$.post(...。然後在回調函數中立即使用php文件返回的值,而不是返回,然後從另一個函數中使用......不幸的是,我無法讓我的大腦纏繞在.done()或類似的東西上,今天已經在這方面工作太久了...... - 也許下一次。它現在的作品:)

+7

這不是範圍問題。這是一個異步問題。您需要在回調中使用返回值,回調調用的函數或對Deferred對象的回調,以確保Ajax回調已經執行。您正在嘗試在執行回調之前使用'returnvalue'。 – Paulpro

+0

可能重複的[如何從AJAX調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

+0

是的,很可能...對不起! – olli

回答

3

正如在評論中提到的,你需要處理回調中的返回值(因爲你正在處理異步調用)。

這可能給你如何解決這個問題更好的理解:

function getReturnValue(inputvalue, callback){ 
    $.post('ajax/valuecheck.php', { 'inputvalue_test': inputvalue}, callback); 
} 

var inputvalue = $("input[name='inputvalue']").val(); 

getReturnValue(inputvalue, function(is_valid){ 
    //handle is_valid here 
    //it's the data returned from the ajax call 
}); 

有很多類似的threads

+0

我想我是非常偏離軌道......感謝您的幫助! – olli

+0

@olli沒問題 - 很高興幫助! – Johan