0

jQuery と PHP でメールを送信しています。ajax が成功した場合は送信し、そうでない場合は送信しないようにページに指示する必要があります。戻り値を成功属性とエラー属性に配置しようとしましたが、うまくいきませんでした。そのため、false を返すことでフォームを送信しないように設定できるかどうかを確認したいのですが、成功した場合はページを送信することができます。サーバーサイドの仕事。

以下の例では、変数を設定しようとし、条件を使用してそれを読み取りました。値がグローバルに渡されないように見えるため、エラー メッセージが表示されます。そのため、条件が sendMe を読み取ると、未定義であると表示されます。

これを正しく行う方法はありますか?

$.ajax({
    type: "POST",
    url: "send.php",
    data: data,
    success: function(){
        var sendMe = 'true';
    },
    error: function(){
        alert('Error: Message could not be sent');
    }
});

if (sendMe == 'true'){
    //Submit the page...                    
}
else {
    return false;
}
4

4 に答える 4

2

関数を作成し、それからsendMe()その関数を呼び出すだけsuccess: でうまくいくはずです。

コードが機能しない理由は、javascriptがajax呼び出しが戻るのを待っていないためです。これは、ajax呼び出しの直後にsendMeを評価しますが、その時点ではまだfalseです。

もちろん、それを防ぐためにこの呼び出しを同期的に行うことを検討することもできますが、それが正しい方法かどうかはわかりません。(async : falsejQuery 1.8で非推奨になりました)

于 2012-07-11T14:27:30.573 に答える
2

条件付きif(sendMe =='true')...が呼び出されるのはいつですか?

このような小さな関数を作成します。

    function sendMe(){
    // whatever your form's id is, put it in place of myForm
    $("#myForm").submit();
    return true;
    }

そして、ajax成功ブロックで関数を呼び出します

于 2012-07-11T14:35:37.443 に答える
0

このセットアップを使用してみてください:

var form = this;
$.ajax({
    type: "POST",
    url: "send.php",
    data: data,
    success: function(){
        form.submit(); // submit form, bypassing jQuery events
    },
    error: function(){
        alert('Error: Message could not be sent');
    }
});
return false; // prevent submit

ajax リクエストの後に false を返すことで送信を防ぎ、jQuery のすべての送信ハンドラーをバイパスしてフォームを直接送信します。form.submit();

于 2012-07-11T14:38:50.820 に答える
0

送信イベントでバリデータ メソッドを通過するようにフォームを設定します。

<form onSubmit='return checkForm();'> </form>

このメソッドcheckForm()では、通常通り ajax 投稿を実行します。ajax ポストが「成功」として返された場合は、送信を続行します。それ以外の場合は、送信return false;をキャンセルし、それに応じてユーザーに通知します。

于 2012-07-11T14:38:55.473 に答える