我有一个输入字段,用户可以在其中输入INPUTVALUE
,此INPUTVALUE
会针对reg-ex检查其是否正确,然后发送到php文件,该文件将使用它,并返回0(意味着INPUTVALUE
无效)或RETURNVALUE
。此RETURNVALUE
应显示在网站上ID为#VALUEINFO
的元素中。此外,我希望我的函数RETURNVALUE
返回get_value_by_input()
。为了检查返回的内容,我首先显示警报。
(此实际应用可能是例如订单上的优惠券代码...放入您的优惠券代码,我们在数据库中检查它,它返回优惠券的价值或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()
处理我的大脑或者类似的东西,猜猜我今天已经在这方面工作太久...... - .-也许下次。它现在有效:)
答案 0 :(得分: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。