javascript变量范围 - 我该如何解决这个问题?

时间:2013-07-18 23:20:23

标签: javascript ajax jquery asynchronous

我有一个输入字段,用户可以在其中输入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()处理我的大脑或者类似的东西,猜猜我今天已经在这方面工作太久...... - .-也许下次。它现在有效:)

1 个答案:

答案 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