我怎样才能让我的JS返回true或false?

时间:2012-04-18 08:51:43

标签: php forms return return-value

当变量' f '我错误时,我想返回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();
    }

 });

我试过这个,但它仍然没有从'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) {
            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
    }

 });

完美无缺: - )

3 个答案:

答案 0 :(得分:2)

这部分应该做你想要的:

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

$ .post将始终立即返回 。 Ajax调用完成后将调用myFunction,但到那时你已经从.submit块中返回了

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

答案 1 :(得分:1)

创建一个DIV,其中包含false

中的true$.ajax
<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() );

      }

答案 2 :(得分:0)

区分大小写可能是个问题。 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);}));
}