1. ホーム
  2. php

PHPを使用して、JQuery .ajax()の適切な成功/エラーメッセージを返すにはどうすればよいですか?

2023-10-12 06:12:12

質問

エラーアラートが何度も表示されます。MYSQLの部分には何の問題もなく、クエリは実行され、データベース内の電子メールアドレスも見ることができます。

クライアント側です。

<script type="text/javascript">
  $(function() {
    $("form#subsribe_form").submit(function() {
      var email = $("#email").val();

      $.ajax({
        url: "subscribe.php",
        type: "POST",
        data: {email: email},
        dataType: "json",
        success: function() {
          alert("Thank you for subscribing!");
        },
        error: function() {
          alert("There was an error. Try again please!");
        }
      });
      return false;
    });
  });
</script>

サーバ側です。

<?php 
$user="username";
$password="password";
$database="database";

mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Unable to select database");

$senderEmail = isset( $_POST['email'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['email'] ) : "";

if($senderEmail != "")
    $query = "INSERT INTO participants(col1 , col2) VALUES (CURDATE(),'".$senderEmail."')";
mysql_query($query);
mysql_close();

$response_array['status'] = 'success';    

echo json_encode($response_array);
?>

どのように解決するのですか?

JSON dataTypeを使用している場合、正しいcontent typeを提供する必要があります。jsonをエコーする前に、正しいヘッダを付けてください。

<?php    
    header('Content-type: application/json');
    echo json_encode($response_array);
?>

追加修正として、クエリーが成功したかどうかをチェックする必要があります。

if(mysql_query($query)){
    $response_array['status'] = 'success';  
}else {
    $response_array['status'] = 'error';  
}

クライアント側では

success: function(data) {
    if(data.status == 'success'){
        alert("Thank you for subscribing!");
    }else if(data.status == 'error'){
        alert("Error on query!");
    }
},

お役に立てれば幸いです。