Javascript - 意外结果检查变量赋值

时间:2014-06-10 09:16:09

标签: javascript php jquery

我正在尝试使用JavaScript来验证输入字段,特别是在写入值之前检查数据库中的重复值。用户在输入中键入新字符串,然后单击“添加”按钮。下面的脚本从输入中获取值,然后在采取进一步操作之前检查数据库是否有重复值。

$("#add").click(
    function()  {
        var elem = $(this).prev().get(0);
        var string = String($(elem).val());

        if (string.length > 0)
        {
            var flag = false;
            var type = $(this).attr("data-type");
            var URL = getDataURL(type);

            $.getJSON(URL, function(data){
                $.each(data, function(key,val){
                    if (string.toLowerCase() === val.toLowerCase())
                    {
                        flag = true;
                    }
                });
            });

            alert(flag);
            alert(flag);

            if (flag)
            {
                alert(flag + " :Duplicate");
            } else {
                alert(flag + " :Unique");
            }
        }
});

由于某种原因,我无法理解,标志值的第一次测试总是在getJSON函数之后返回'false'。所以在上面的代码中,第一个'alert(flag);' call始终将标志值返回为false,第二个返回true或false,具体取决于在其上方的条件测试中实际分配给flag变量的内容。

如果我删除了警告行,则标志值false总是被赋予脚本底部的条件测试,因此函数始终返回该值是唯一的。

当警报行出现时,只有第一个警报调用将标志值返回为false,然后后续警报调用和以下条件使用我在条件上面的赋值中预期的值(true或false) 。

似乎在getJSON函数之后,对flag变量的第一次测试总是返回它被设置为false,然后所有其他测试返回true或false,具体取决于实际分配给flag变量的内容功能。我无法理解为什么,显然有一个合乎逻辑的解释是在逃避我。

我们将非常感谢您对此行为的任何帮助或解释。非常感谢提前。

0 个答案:

没有答案