【发布时间】:2013-07-18 23:20:23
【问题描述】:
我有一个输入字段,用户可以在其中输入一个INPUTVALUE,这个INPUTVALUE 会根据正则表达式检查正确性,然后发送到一个 php 文件,该文件将使用它进行计算,然后返回0(表示INPUTVALUE 无效)或RETURNVALUE。这个RETURNVALUE 应该显示在网站上ID 为#VALUEINFO 的元素中。我也希望我的函数get_value_by_input() 返回这个RETURNVALUE。为了检查返回的内容,我首先显示警报。
(一个实际的应用可能是例如订单上的优惠券代码......输入您的优惠券代码,我们在数据库中检查它,它返回优惠券的价值,如果它不是有效的,则返回 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;
}
}
再次: 即使#VALUEINFO 给了我正确的返回值,为什么这段代码总是提示“未指定返回值”?
我认为这与 if 块有关,我读到 javascript 不会忽略 if 块中任何变量的设置,即使条件不满足...但是我怎么能将值传递给 # valueinfo 并同时返回? 任何帮助或建议将不胜感激! :-)
编辑:
嗯,是的,它与变量范围无关,但它与 Asynchronus-jax 有关。
我最终重组了我的代码……get_value_by_input() 现在更像是一个process_input() 函数。首先检查INPUTVALUE 的正确性,并且只有在没有错误的情况下才会调用$.post(...。然后在回调函数中立即使用 php 文件返回的值,而不是返回然后从另一个函数中使用......不幸的是,我无法让我的大脑专注于使用 .done() 或类似的东西,猜我今天已经为此工作太久了... -.- 也许下一次。它现在有效:)
【问题讨论】:
-
这不是范围问题。这是一个异步问题。您需要在回调、回调调用的函数或对保证 Ajax 回调已经执行的 Deferred 对象的回调中使用返回值。您目前正在尝试在回调执行之前使用
returnvalue。 -
是的,很有可能……对不起!
-
我想我很偏离轨道...感谢 cmets。我将在我的回答中包括我是如何解决它的。
标签: javascript ajax jquery asynchronous