0

これは以前に尋ねられたことを知っており、これを扱っていることがわかったすべての投稿を見てきました。jQuery.post関数がphpスクリプトからエラーを正しく受け取ることができません。ここに両方があります。
PHP:

<?php 
##CONFIGURATION
# LIST EMAIL ADDRESS
$toemail = "email here";

# SUBJECT (Subscribe/Remove)
$subject = "Someone has contacted International Designs";

# RESULT PAGE
$location = "../thank-you.php";

## FORM VALUES ##
$myname = $_REQUEST['myname'];
$myemail = $_REQUEST['myemail'];
$mymessage = $_REQUEST['mymessage'];

if ( empty($myname) || empty($myemail) || empty($mymessage) ) {

    exit('{"error":"That value was invalid!"}')

} else {

    # SENDER
    $email = $myname . " <" . $myemail . ">";

    # MAIL BODY
    $body .= "Name: " . $myname . " \n\n";
    $body .= "Email: " . $myemail . " \n\n";
    $body .= "Message: " . $mymessage . " \n\n";
    # add more fields here if required

    ## SEND MESSGAE ##

    mail( $toemail, $subject, $body, "From: $email" ) or die ("Mail could not be sent.");

}

?>

JS:

if (verify(myname, myemail, mymessage, human, hash, patt)) {
  $.post(myform.attr('action'), myform.serialize(), function() {
    $('#email-success').fadeIn();
    myform[0].reset();
    setTimeout("$('#email-success').fadeOut();", 5000);
  }, 'json')
  .fail(function() {
    alert('An error has occurred. Please try again later.')
  });
}

私はすでに約5つの異なる方法を試しましたが、どれもうまくいきませんでした. 'json' を .post 関数のデータ型として配置すると、php スクリプトの内容に関係なく、常に.fail が発生します。データ型を省略した場合、.failはどのような状況でも起動しません。問題はphpコマンドとデータ型にあると感じています。どんな助けでも大歓迎です。

4

3 に答える 3

2

おそらく、応答の http ヘッダー コードを変更せず、応答のデータ型を指定していないことが原因です。

どのような場合でも「200 – OK」ステータスのフロント (jQuery) コードへの php コード応答ですが、場合によっては「HTTP/1.0 400 – Bad Request」応答または「HTTP/1.0」でエラーが予想されます。 500内部サーバーエラー'。

また、Eggplant のように、応答のデータ型を「Content-Type: application/json」として指定する必要があります。

したがって、最終的なコードは次のようになります。

<?php 
...

header('HTTP/1.0 204 – No Content', true, 204);
header('Content-Type: application/json');

if ( empty($myname) || empty($myemail) || empty($mymessage) ) {

    header('HTTP/1.0 400 – Bad Request', true, 400);
    exit('{"error":"That value was invalid!"}')

} else {

    ...

    $send = mail( $toemail, $subject, $body, "From: $email" );
    if (!$send)
        header('HTTP/1.0 500 – Internal Server Error', true, 500);
        exit ('{"error":"Mail could not be sent."}');
    }
}
return;
?>

警告については、同じ問題でこの回答Cannot modify header information - headers already sent by (output started at /homepages/.../design/contact.php:1)を調べることができます。

出力は次のとおりです。

  • 意図しない:
    • 前の空白
    • UTF-8 バイト オーダー マーク
    • 以前のエラー メッセージまたは通知
  • 意図的:
    • 出力を生成する print、echo およびその他の関数 (var_dump など)
    • 前の生の領域

チャット セッション後の更新: UTF-8 BOM の問題でした

于 2013-05-17T08:04:38.183 に答える
0

これを試して

if (verify(myname, myemail, mymessage, human, hash, patt)) {
    $.ajax({
        type    :'POST',
        data    :$("#myformid").serialize(),
        beforeSend:function(){

        },
        success:function(res){
            if(res=='ok'){
                setTimeout("$('#email-success').fadeOut();", 5000);
            }else{
                //read respon from server
                alert(res)
            }
        },
        error:function(){
            //error handler
        }
    });
}

そして単なる例

$send = mail(....);//your mail function here
echo ($send) ? "ok" : "Error";
于 2013-05-17T08:13:47.883 に答える