2

jQuery.ajax() を使用して送信されるフォームを含む php ファイルがあります。メールが送信されず、エラーメッセージが表示されない場合に発生する問題。

$(document).ready(function () {
    $('input[type="submit"]').click(function () {
        $.ajax({
            url: "mail.php",
            type: "POST",
            data: {
                name: $('input[name="name"]').val(),
                email: $('input[name="email"]').val(),
                msg: $('input[name="msg"]').val()
            },
            cache: false,
            success: function(responseText) {
                $('#result').css('background', 'green');
            },
            error: function(responseText) {
                $('#result').css('background', 'red');
            }
        });
        return false;
    });
});

電子メールが送信されないため、エラーは何も表示されませんが、成功ははいです。そこで、mail.php コードを他のコードに変更します。

<?php
    if(2 > 4) {
        true;
    } else {
        false;
    }
?>

ボタンを押すと、成功アクションがまだ機能していて、その理由がわかりません。

4

7 に答える 7

2

エラー コールバックは、PHP のメール機能が失敗した場合ではなく、ajax 呼び出しが失敗した場合にのみトリガーされます。また、サーバーから何か (文字列 "false") を受け取ったときに false を返した場合もトリガーされません。

このようなエラーをキャッチするには、PHP からエラーをトリガーするか、成功ハンドラーでエラーをキャッチします。

success: function(data) {
    if (!data || $.trim(data) == 'false') {
        $('#result').css('background', 'red');
    }else{
        $('#result').css('background', 'green');
    }
},

とPHP

<?php
    echo 2>4 ? 'true' : 'false';
?>
于 2013-06-05T11:08:34.670 に答える
1

エラー関数を削除し、成功関数を変更します

 $.ajax({
            url: "mail.php",
            type: "POST",
            data: {
                name: $('input[name="name"]').val(),
                email: $('input[name="email"]').val(),
                msg: $('input[name="msg"]').val()
            },
            cache: false,
success: function(responseText) {
                if(responseText)$('#result').css('background', 'green');
                else $('#result').css('background', 'red');
            }

        });
于 2013-06-05T11:09:02.833 に答える
0

どちらの場合も、成功のコールバックが発生します。

success: function(responseText) {
                if(!!responseText)  //!! convert string to boolean
                   $('#result').css('background', 'green');
                else
                   $('#result').css('background', 'red');
            },
于 2013-06-05T11:08:48.907 に答える
0

最初に mail.php ファイルで、返したいものをエコーし​​ます。

<?php
    if(2 > 4) {
      echo "true";
    } else {
       echo "false";
    }
?>

そして、成功関数でそれを行います:

       success: function(responseText) {
           if(responseText) {
            $('#result').css('background', 'green');
           } else {
            $('#result').css('background', 'red');
           }
        }
于 2013-06-05T11:14:29.743 に答える
0

jQuery が php ファイルへの接続に失敗しない限り、エラー関数はトリガーされません。この場合、独自のエラーを処理したくないでしょう。まず、これは何をしますか?

if(2 > 4) {
    true;
} else {
    false;
}

これはjQueryに何も送信しません。次のことをお勧めします

if(2 > 4) {
   echo 'true';
} else {
   echo 'false';
}

次に、jQueryで

$(document).ready(function () {
    $('input[type="submit"]').click(function () {
        $.ajax({
            url: "mail.php",
            type: "POST",
            data: {
                name: $('input[name="name"]').val(),
                email: $('input[name="email"]').val(),
                msg: $('input[name="msg"]').val()
            },
            cache: false,
            success: function(result) {
                if(result === 'true') {
                   $('#result').css('background', 'green');
                } else {
                  $('#result').css('background', 'red');
                }
            },
            error: function(error) {
                alert(error)
            }
        });
        return false;
    });
});
于 2013-06-05T11:15:03.827 に答える
0

また、使用している jquery のバージョンによっても異なります。1.9 の場合は、done、fail、always 関数を使用して処理できます。

1.9の場合

var request = $.ajax({
url: "mail.php",
            type: "POST",
            data: {
                name: $('input[name="name"]').val(),
                email: $('input[name="email"]').val(),
                msg: $('input[name="msg"]').val()
    }

});

request.done(function(e){
//GET THE STATUS FOR THE EMAIL FROM THE PHP SCRIPT
//ASSUMPTION THAT FETCHING e=1/0 - 1 - Success, 0 - Failure
if(parseInt(e))
{
$("#result").css("background","green");
}
else
{
$("#result").css("background","red");
}

});
于 2013-06-05T11:17:27.163 に答える
0

1) あなたの php スクリプトは何も返しません。たとえば、HTML ページからすべての JavaScript を削除し、フォームの action 属性で myphp.php を指定すると、myphp.php は次のようになります。

<?php

$html = "<html><head></head><body><div>Hello world.</div></body></html>";

?>

フォームの送信ボタンをクリックすると、何が表示されますか?

2) リクエストが失敗した場合、エラー関数が呼び出されます。PHP スクリプトから Nothing または false の応答を取得しても、要求の失敗ではありません。リクエストの成功とは、ブラウザがリクエストを送信し、サーバーがリクエストを受信し、サーバーが php スクリプトを実行し、サーバーが php スクリプトの結果をレスポンスとして送り返したことを意味します。サーバーがビジーでリクエストに応答できない場合、リクエストの処理中にサーバーがクラッシュした場合、存在しないファイルをリクエストした場合など、リクエストは失敗します。

于 2013-06-05T11:23:18.310 に答える