これはサーバーの問題である可能性がありますが、サーバーにアクセスできないため、他の人が修正を行っている可能性があります。問題の原因となります。 jQueryのAJAXを使用してajax jqueryを使用してPOSTとJSONを同時に実行できない
問題....
私は同時にPHPファイルにデータをPOSTし、PHPファイルからJSONエンコードされたデータを受信することができません。 json dataTypeが含まれている場合は、フォームからPHPファイルにPOSTデータを送信できません。 json dataTypeを指定しなかった場合(つまり、コメントアウトした場合)、phpファイルにデータをPOSTできますが、jsonでエンコードされたデータは受信できません。
これは私自身のjs/phpコードとダウンロードしたソースコードで試してみましたが、これはコードを間違えた場合の結果を比較するためです。両方とも「提出書類」であり、両者とも上記の問題を呈しています。関連性がある場合は、以下にダウンロードしたソースコードを含めます。私のjs/phpコードは、同様のajaxリクエストを使用します。
はJavaScript:
<script type="text/javascript">
$(document).ready(function(){
$("#myForm").submit(function(){
dataString = $("#myForm").serialize();
$.ajax({
type: "POST",
url: "postForm_ajax.php",
data: $("#myForm").serialize(),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(msg){
$("#formResponse").removeClass('error');
$("#formResponse").addClass(msg.status);
$("#formResponse").addClass(msg.status);
},
error: function(){
$("#formResponse").removeClass('success');
$("#formResponse").addClass('error');
$("#formResponse").html("There was an error submitting the form. Please try again.");
}
});
//make sure the form doens't post
return false;
});
});
</script>
PHP:
<?php
//function to validate the email address
//returns false if email is invalid
function checkEmail($email){
if(!preg_match("/^[_\.0-9a-zA-Z-][email protected]([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email)) {
//if(eregi("^[a-zA-Z0-9_][email protected][a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email)){
return FALSE;
}
list($Username, $Domain) = explode("@",$email);
if(@getmxrr($Domain, $MXHost)){
return TRUE;
} else {
if(@fsockopen($Domain, 25, $errno, $errstr, 30)){
return TRUE;
} else {
return FALSE;
}
}
}
//response array with status code and message
$response_array = array();
//validate the post form
//$name = $_POST['name'];
//check the name field
if(empty($_POST['name'])){
//set the response
$response_array['status'] = 'error';
$response_array['message'] = 'Name is blank';
//check the email field
} elseif(!checkEmail($_POST['email'])) {
//set the response
$response_array['status'] = 'error';
$response_array['message'] = 'Email is blank or invalid';
//check the message field
} elseif(empty($_POST['message'])) {
//set the response
$response_array['status'] = 'error';
$response_array['message'] = 'Message is blank';
//form validated. send email
} else {
//send the email
$body = $_POST['name'] . " sent you a message\n";
$body .= "Details:\n\n" . $_POST['message'];
mail($_POST['email'], "SUBJECT LINE", $body);
//set the response
$response_array['status'] = 'success';
$response_array['message'] = 'Email sent!';
}
echo json_encode($response_array);
?>
EDIT ....一つの解決策
は、[OK]を...ので、私の作品ハックを見つけました。私はdataType: 'json'を指定しません。つまり、その行とcontenType行をコメントアウトします。それから私はデータをPOSTすることができます。それでもphpファイルにjson_encode($ response_array)をエコーします。 AJAX呼び出しの「JSON」:そして、これはデータ型を指定することができることほど素敵ではありません成功機能
var obj = jQuery.parseJSON(msg);
$("#formResponse").addClass(obj.status);
$("#formResponse").html(obj.message);
に次のコードを置きます。誰かがより良い解決策を持っている場合や、なぜこの問題が発生しているのか説明できる場合は、私に教えてください。
おかげ
私はデータ型を持つしようとした非常によく働いたが、それはdidnの」仕事。[here](http://stackoverflow.com/questions/79498/unable-to-receive-json-from-jquery-ajax-call)を見てから、私はcontentTypeを含めて、ajaxリクエストを送信することができました。 – elegance