0

当变量“ 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();
    }

 });

我已经尝试过了,但它仍然没有从'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
    }

 });

这完美地工作:-)

4

3 回答 3

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 总是会立即返回。myFunction 将在 Ajax 调用完成时被调用,但此时您已经从 .submit 块返回!

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

于 2012-04-18T08:59:39.237 回答
1

Create a DIV that will hold your false or true value from the $.ajax

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

Now structure your 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() );

      }
于 2012-04-18T09:30:05.660 回答
0

区分大小写可能是一个问题。Javascript 使用trueand false,而不是TRUEand FALSE

在您的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);}));
}
于 2012-04-18T09:02:35.373 回答