2012-05-09 11 views
0

これはサーバーの問題である可能性がありますが、サーバーにアクセスできないため、他の人が修正を行っている可能性があります。問題の原因となります。 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); 

に次のコードを置きます。誰かがより良い解決策を持っている場合や、なぜこの問題が発生しているのか説明できる場合は、私に教えてください。

おかげ

答えて

0

私によると、あなたは多くのものに指定されている以外...間違って何もしていません...

例の場合は:AJAX呼び出しが機能するため dataType: "json",

が十分にあります....あなたの中

contentType: "application/json; charset=utf-8",

の必要がありませんコードは、この行を追加する場合、それが何らかの理由で(実際の理由については非常にわからない)と引き換えに空の配列を返します....

しかし、今、私はちょうど

dataType: "json",

を指定し、それが動作します魅力のように戻って私は解析する必要がないオブジェクトを取得します。

編集:私は試した何

followringとして...ちょうどnameからFNAMEするために入力された名前を変更し、それが

<form id="myForm" name="myForm" method="POST" 
    action="postform_ajax.php"> 
    name: <input type="text" name="fname" /> <br /> email: <input 
     type="text" name="email" /> <br /> message: <input type="message" 
     name="message" /> <br /> <input type="submit" /> 
    <div id="formResponse"></div> 
</form> 
<script type="text/javascript" 
    src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
<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", 
       success : function(msg) { 
        $("#formResponse").removeClass('error'); 
        $("#formResponse").addClass(msg.status); 
        $("#formResponse").html(msg.status); 
       }, 
       error : function() { 
        console.log('err', msg); 
        $("#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> 
+0

私はデータ型を持つしようとした非常によく働いたが、それはdidnの」仕事。[here](http://stackoverflow.com/questions/7949​​8/unable-to-receive-json-from-jquery-ajax-call)を見てから、私はcontentTypeを含めて、ajaxリクエストを送信することができました。 – elegance

関連する問題