2

この質問は、すでに回答されている質問とは少し異なります...

私がしようとしているのは、フォーム送信時に MySQL クエリを実行するautoHide()PHP ファイル を呼び出す関数 を実行することですartistdo.php。フォーム送信時に true が返された場合 (クエリが成功した場合)、フォームは送信されません。

私が得ているのは、MySQL クエリが実行されていないことです。クエリを削除して return true をartistdo.phpページに配置しても、ajax の return false はフォームの送信を停止しませんが、alert("Success");が呼び出されます。ただし、autoHide()関数内で return false を AJAX の外に置くと、フォームは正しく送信されません。これが私がこれまでに持っているものです:

フォームページ:

<head>
    function autoHide() {
        $.ajax({
            'url': '/artistdo.php',
            'type': 'GET',
            'dataType': 'json',
            'data': {
                cmd: 'autoHideProduct'
            },
            'success': function () {
                alert("Success");
                return false;
            }
        });
    }
</head>

<body>
  <form action="http://off-site/form.php" method="post" 
        onSubmit="return autoHide()">
    <input type="submit" value="submit"
           onMouseOver="this.style.cursor='pointer'">
  </form>

そしてartistdo.phpページ(これは読みやすいように簡略化されたバージョンです):

if($get['cmd'] == 'autoHideProduct') {
    $query = mysql_query("UPDATE products SET house='0'");

    if ($query) {
        return true;
    } else {
        return false;
    }

そのため、MySQL クエリ全体をページから完全に削除し、artistdo.php何も置き換えないと、フォームは引き続き送信されます。これは、ページが確実に true を返し、が呼び出されているreturn true;ため、AJAX に問題があると思わせます。AJAX 呼び出しの外に移動すると、フォームが正しく送信されません。artistdo.phpalert("Success");return true

これが理にかなっていることを願っています...

助けてくれてありがとう!

4

4 に答える 4

2

このメソッドを使用して、.data()メタデータを送信する必要があるかどうかを知ることができるフォームに関連付けることができます。

<head>
    <script type="text/javascript">
        $(function() {
            $('#myform').submit(function() {
                if ($(this).data('shouldSubmit')) {
                    return true;
                }

                $.ajax({
                    url: '/artistdo.php',
                    type: 'GET',
                    dataType: 'json',
                    context: this,
                    data: { cmd: 'autoHideProduct' },
                    success: function (result) {
                        if (result) {
                            $(this)
                                .data('shouldSubmit', true)
                                .submit();
                        }
                    }
                });

                return false;
            });
        });
    </script>
</head>

<body>
    <form action="http://off-site/form.php" method="post" id="myform">
        <!-- Form fields -->
        <input type="submit" value="submit" onMouseOver="this.style.cursor='pointer'">
    </form>
</body>
于 2011-12-14T07:30:12.213 に答える
0

私があなたを正しく理解していれば、これは助けになるかもしれません

$('form').submit(function (event)
{
    event.preventDefault();
    //handle the rest of the logic
}

これにより、フォームの送信が停止します。戻り値が true の場合は、関数を呼び出してフォームを送信する必要があります。

于 2011-12-14T00:45:20.830 に答える
0

現在のコード構造を考えると、最初の問題は、への呼び出し$.ajaxが非同期であることです。つまり、呼び出しが実行された後、ブラウザーは次のステートメントに移動し、$.ajax呼び出しを「バックグラウンドで」終了させます。これが、呼び出しの成功関数内に return false を配置するのではなくreturn false、呼び出しの後にステートメントを配置すると、フォームが送信されない理由です。$.ajax$.ajax

何らかのグローバル変数を作成しない限り、あなたがやりたいことは本当に可能だとは思いません。フォームのやり方を変えることは可能ですか?

于 2011-12-14T00:46:46.657 に答える
0

問題はこの行にあると思います

    if($get['cmd'] == 'autoHideProduct') {

それは次のようになるはずです

    if($_GET['cmd'] == 'autoHideProduct') {
于 2011-12-14T07:10:36.573 に答える