1

我有一个输入字段,用户可以在其中输入一个INPUTVALUEINPUTVALUE它会根据正则表达式检查正确性,然后发送到一个 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;
    }
}

再次: 即使#VALUEINFO 给了我正确的返回值,为什么这段代码总是提示“没有指定返回值”?

我认为这与 if 块有关,我读到即使条件不满足,javascript 也不会忽略 if 块中任何变量的设置......但是我怎么能将值传递给 #valueinfo 并返回同时呢?任何帮助或建议将不胜感激!:-)

编辑:

嗯,是的,它与变量范围无关,但它与 Asynchronus-jax 有关。我最终重组了我的代码......get_value_by_input()现在更像是一个process_input()函数。首先INPUTVALUE检查正确性,并且只有在没有错误$.post(...的情况下才会调用。然后在回调函数中立即使用 php 文件返回的值,而不是返回然后从另一个函数中使用......不幸的是,我无法让我的大脑围绕使用.done()或类似的东西,我猜我已经今天已经在这方面工作太久了...... -.- 也许下次。它现在有效:)

4

1 回答 1

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
});

有很多类似的线程

于 2013-07-18T23:40:16.960 回答