AJAX呼び出しを使用してフォームデータをPHPスクリプトに送信しようとしています。フォームデータをシリアル化してPOSTメソッドでJSON変数としてPHPスクリプトに送信しています。 Ajaxのデータ変数は正しいようですが、何らかの理由でPHP $ _POST配列が空で、私がここで間違っていることを理解するのに苦労しています。
これは私のAJAX呼び出し
// AJAX
var input_data = $('#contact-form').serialize();
event.preventDefault();
$.ajax({
url: 'contact.php',
type:'POST',
dataType:'json',//return type from server side function [return it as JSON object]
contentType: "application/json",
data: input_data, //Pass the data to the function on server side
success: function (data) { //Array of data returned from server side function
$.each(data,function(index){
alert(data[index]); // used for debugging, returns 1
});
}
});
alert("called");
if(input_data.length < 1)
{
alert("empty");
alert(input_data);
}
else
{
alert("not empty");
alert(input_data);
}
return false;
フォーム
<form class="text-center" id="contact-form" method="POST" action="contact.php">
<div class="form-group">
<input type="text" class="form-control" id="name" name="name" placeholder="Name">
</div>
<div class="form-group">
<input type="email" class="form-control" id="email" name="email" placeholder="Email">
</div>
<div class="form-group">
<textarea class="form-control" rows="5" id="msg" name="msg" placeholder="Type your message"></textarea>
</div>
<div class="form-group">
<div class="g-recaptcha buffer" data-sitekey="some_key" data-callback="recaptcha_callback"></div>
<input type="hidden" class="hiddenRecaptcha required" name="hiddenRecaptcha" id="hiddenRecaptcha">
</div>
<button type="submit" class="btn btn-lg btn-primary text-uppercase buffer">Send message</button>
</form>
とPHPコードを実行することにより、最終的に私contact.phpスクリプト
<?php
header('Content-Type: application/json');
$name;
$email;
$msg;
$nameErr = $emailErr = $msgErr = 0;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = 1;
}
else {
$name = $_POST["name"];
$nameErr = 0;
}
if (empty($_POST["email"])) {
$emailErr = 1;
}
else {
$email = $_POST["email"];
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$emailErr = 0;
} else {
$emailErr = 1;
}
}
if (empty($_POST["msg"])) {
$msgErr = 1;
}
else {
$msg = $_POST["msg"];
$msgErr = 0;
}
if($nameErr == 0 && $emailErr == 0 && $msgErr == 0)
{
$to = "[email protected]";
$subject = 'Contact request - site';
$txt = $_POST['msg'];
$headers = "From: " . $_POST['email'] . "\r\n";
mail($to,$subject,$txt,$headers);
echo json_encode(array("sent"));
}
else
{
echo json_encode(array($nameErr, $emailErr, $msgErr));
}
}
else
{
echo json_encode(array("post_error"));
}
?>
で、メールが正しく送信取得します。 Ajax呼び出しを使用する場合、$ _POST配列は空であり、PHPコードの最後のif文から3つのエラーコードを返します。また、これを実現するためのより良い方法があれば、私は代替案を見て嬉しいです。助けてくれてありがとう、ありがとう。
EDIT:$('#contact-form').serialize()
を使用することでJSONデータ
まず第一に、あなたはjQueryのを使用している場合、なぜちょうど 'の代わりに' $アヤックス() 'のの$ .postを()'は使用しませんか?次に、$ _POST変数がPHPファイルに現れるはずです - PHPファイルの先頭に 'var_dump($ _ POST)'を実行しますか? – junkfoodjunkie
@junkfoodjunkie '$ .post'は' $ .ajax'のエイリアスで、タイプが 'POST'で、何かを変更する必要はありません。 –
これは必要ではありません。とにかく既にPOSTを実行していて、X-HTTPリクエストを行う必要はありません。 – junkfoodjunkie