2017-01-08 17 views
-1

jQueryからPHPへのAJAX呼び出しがあります(PHPがjson_encode配列で応答しますが、jQueryでは配列の値にアクセスできません)。
ステータスはOKですが、responseTextはundefinedです。jQueryのjson_encodeからデータを取得できません

$(document).ready(function() { 
    $("#comments_form").on("submit", function(e) { 
     e.preventDefault(); 
     e.stopPropagation(); 

     $.ajax({ 
      type: 'POST', 
      url: 'process_in.php', 
      data: { 
       first: $("#firstname").val(), 
       second: $("#lastname").val(), 
       third: $("#mail").val(), 
       fourth: $("#phone").val(), 
       fifth: $("#message").val() 
      }, 
      success: function(result) {      
       var x = jQuery.parseJSON(result); 
       alert(x.f); 
      }, 
     }); 
    }); 
}) 
<?php 
    include ('connection.php'); 
    if (isset($_REQUEST['first']) && isset($_REQUEST['second']) && isset($_REQUEST['third']) && isset($_REQUEST['fourth']) && isset($_REQUEST['fifth'])) 
    { 
     $firstname = $_REQUEST['first']; 
     $lastname = $_REQUEST['second']; 
     $email = $_REQUEST['third']; 
     $contact = $_REQUEST['fourth']; 
     $message = $_REQUEST['fifth']; 

     $data = array(); 
     $data["f"] = xssafe($firstname); 
     $data["l"] = xssafe($lastname); 
     $data["e"] = xssafe($email); 
     $data["c"] = xssafe($contact); 
     $data["m"] = xssafe($message); 
     echo json_encode($data); 
    } 

    function xssafe($d) 
    { 
     $x = filter_var($d, FILTER_SANITIZE_STRING); 
     return $x; 
    } 
+1

コンソールにエラーがありますか?あなたのサーバーからの応答のHTTPステータスは何ですか?レスポンステキストは期待どおりのものですか?これをすべてデバッグしましたか?質問を編集して詳細を追加してください。 –

+1

AJAXコール – Thamilan

+1

に 'dataType: 'json''を追加し、' jQuery.parseJSON(result); 'を削除し、' result.f'を直接使用してください。 –

答えて

0

良い練習はいつもあまりにもエラーをキャッチすることです。あなたのAjaxリクエストでは、例外を処理するエラーコールバックはありません。 jQuery.parseJSON();の代わりにdataType: "JSON"を使用すると、jsonが解析不能になると、エラーブロックでコールバックが取得されるようになります。

$.ajax({ 
    type: 'POST', 
    url: 'process_in.php', 
    dataType: 'JSON', 
    data: { 
     first: $("#firstname").val(), 
     second: $("#lastname").val(), 
     third: $("#mail").val(), 
     fourth: $("#phone").val(), 
     fifth: $("#message").val() 
    }, 
    success: function(result) {      
     console.log(result.f); 
    }, 
    error: function (jqXHR, exception) { 
     var msg = ''; 
     if (jqXHR.status === 0) { 
      msg = 'Not connect.\n Verify Network.'; 
     } else if (jqXHR.status == 404) { 
      msg = 'Requested page not found. [404]'; 
     } else if (jqXHR.status == 500) { 
      msg = 'Internal Server Error [500].'; 
     } else if (exception === 'parsererror') { 
      msg = 'Requested JSON parse failed.'; 
     } else if (exception === 'timeout') { 
      msg = 'Time out error.'; 
     } else if (exception === 'abort') { 
      msg = 'Ajax request aborted.'; 
     } else { 
      msg = 'Uncaught Error.\n' + jqXHR.responseText; 
     } 
     console.log(msg); 
    } 
}); 

あなたは、コードをデバッグし、今、あなたが値を取得していない多くの可能な場合がある、あなたのコードに取得することができますあなたのエラーログ

をチェックする方法を学ぶことができます。

これはあなたのPHPコードでも、あなたのjqueryでもかまいません。そのが有効なJSONを返すかどうかを確認するために、PHPで

あなたは

のために他の部品を追加するので、任意の値を返していないPHPのコードのように、この

http://.../process_in.php?first=foo&second=foo&third=foo&fourth=foo&fifth=foo

のように、ブラウザにURLをヒット

if (isset($_REQUEST['first']) && isset($_REQUEST['second']) && isset($_REQUEST['third']) && isset($_REQUEST['fourth']) && isset($_REQUEST['fifth'])) 
    { 
     $firstname = $_REQUEST['first']; 
     $lastname = $_REQUEST['second']; 
     $email = $_REQUEST['third']; 
     $contact = $_REQUEST['fourth']; 
     $message = $_REQUEST['fifth']; 

     $data = array(); 
     $data["f"] = xssafe($firstname); 
     $data["l"] = xssafe($lastname); 
     $data["e"] = xssafe($email); 
     $data["c"] = xssafe($contact); 
     $data["m"] = xssafe($message); 
     echo json_encode($data); 
    } else { 
     echo json_encode(['error'=>'Invalid request']); 
    } 
関連する問題