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 は常にすぐに返されます。Ajax 呼び出しが終了すると myFunction が呼び出されますが、それまでには .submit ブロックから既に戻っています。

jQuery.ajaxをチェックアウトできます。これには、同期するように設定されています (に設定されasyncていfalseます)。これにより、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 はtrueandfalseではなく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 に答える