我有一個輸入字段,用戶可以輸入一個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()
或類似的東西上,今天已經在這方面工作太久了...... - 也許下一次。它現在的作品:)
這不是範圍問題。這是一個異步問題。您需要在回調中使用返回值,回調調用的函數或對Deferred對象的回調,以確保Ajax回調已經執行。您正在嘗試在執行回調之前使用'returnvalue'。 – Paulpro
可能重複的[如何從AJAX調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –
是的,很可能...對不起! – olli