如何让我的 JS 返回真或假


How can i get my JS to return true or false?

当变量"f"我为FALSE时,我想返回TRUE或FALSE。但是返回永远不会到达浏览器,表单会执行其默认操作。

如何让我的 ELSE 返回值?我试图硬编码一个返回值,而不是写"return myFunction()";这有效,但它对我没有帮助,因为我需要从"myFunction()"返回。

不要过多考虑代码应该做什么,它没有意义,它只是为了演示。

$('#theForm').submit(function()
{
    var f = $('#theInput').val(); // input value
    if(f == TRUE)
    {
        alert('Lorem ipsum');
        return false;
    }
    else // If f is FALSE
    {
        $.post('/php/check.php',{check: f, function(data){myFunction(data);});
        function myFunction(data)
        {
            if(data == 'false')
            {
                // Do something
                return false;
            }
            else
            {
                // Do something
                return true;
            }
        }
        return myFunction();
    }
 });

我已经尝试过了,但它仍然没有从"返回 myFunction()"向表单返回值

$('#theForm').submit(function()
{
    var f = $('#theInput').val(); // input value
    if(f == true)
    {
        alert('Lorem ipsum');
        return false; // Stop default form action
    }
    else // If f is FALSE
    {
     var request = $.ajax({
        async: false,
        url: "/php/checkArea.php",
        type: "POST",
        data: {data: f},
        dataType: "text"
        });
        request.done(function(data) {
            myFunction(data);
        });
        function myFunction(data)
        {
            if(data == 'false')
            {
                // Do something
                return false; // Stop default form action
            }
            else
            {
                // Do something
                return true; // YES PLEASE, do the default form action
            }
        }
        return myFunction();
    }
 });

在您的帮助下,我终于找到了关于异步部分的解决方案。

$('#theForm').submit(function()
{
    var f = $('#theInput').val(); // input value
    if(f == true)
    {
        alert('Lorem ipsum');
        return false; // Stop default form action
    }
    else // If f is FALSE
    {
     var request = $.ajax({
        async: false,
        url: "/php/checkArea.php",
        type: "POST",
        data: {data: f},
        dataType: "text"
        });
        request.done(function(data) {
            globalData = data; // Global variable
        });
        function myFunction(globalData)
        {
            if(globalData == 'false')
            {
                // Do something
                return false; // Stop default form action
            }
            else
            {
                // Do something
                return true; // YES PLEASE, do the default form action
            }
        }
        return myFunction(globalData); // Call the function with the global variable
    }
 });

这非常有效:-)

这部分应该做你想要的:

if(f == TRUE)
{
    alert('Lorem ipsum');
    return false;
}

但是,这不应该:

    $.post('/php/check.php',{check: f, function(data){myFunction(data);});
    function myFunction(data)
    {
        if(data == 'false')
        {
            // Do something
            return false;
        }
        else
        {
            // Do something
            return true;
        }
    }
    return myFunction();

当 Ajax 调用完成时,将调用 myFunction,但那时您已经从 .submit 块返回了!

您可以查看jQuery.ajax,它有一个使其同步的设置(async设置为false)。这可能会锁定浏览器在等待 Ajax 调用时无法执行任何其他操作,但这是进行同步调用的唯一方法。

创建一个DIV,用于保存$.ajax中的falsetrue

<div id="result"></div>

现在构建你的JavaScript

   $('#theForm').submit( function() {
      var f = $('#theInput').val(); // input value
      if(f == TRUE) {
         alert('Lorem ipsum');
         return false;
      } else { // If f is FALSE
         var rVal = $('div#result');
         $.ajax({
            type : 'POST',
            data : f,
            url : '/php/check.php',
            context: rVal,
            async : false,
            success : function (msg) {
               (msg == 'false') ?  $(this).html('FALSE') : $(this).html(msg);
            }
         });
        function myFunction(data) {
            if(data == 'FALSE'){
               // Do something
               return false;
            } else {
               // Do something
               return true;
            }
        }
       return myFunction( rVal.html() );
      }
区分

大小写可能是一个问题。Javascript使用truefalse,而不是TRUEFALSE

else 子句中,您有一个POST回调,用于处理返回的数据。但是,回调myFunction将在代码达到return myFunction()后运行,因为它没有参数,因此将导致匿名函数返回true

您需要使异步调用同步,但即便如此,myFunction将其结果返回到何处?

您可以尝试强制myFunction将其结果返回到正确的上下文,如下所示(我更喜欢在使用函数之前声明该函数),但您仍然可能会遇到同步性问题。从文档中可以看出,$.post不能强制同步。

else // If f is FALSE
{
    function myFunction(data)
    {
        if(data == 'false')
        {
            // Do something
            return false;
        }
        else
        {
            // Do something
            return true;
        }
    }
    return ($.post('/php/check.php',{check: f}, function(data){myFunction(data);}));
}