2017-07-11 6 views
1

場合であっても、呼び出された関数が私のAJAX呼び出しコードです:Ajaxのエラー:要求のステータスはここで200

var name = $('#name').val(); 
var email = $('#email').val(); 
var password = $('#password').val(); 
$.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    cache: false, 
    data: { json : JSON.stringify({ 
     name:name, 
     email:email, 
     password:password 
    })}, 
    dataType: 'json', 

    success: function(){ 
     alert('request successful'); 
    }, 

    error: function(){ 
     alert('error occured'); 
    } 

}); 

リクエストのステータスは200ですが、誤差関数は、すべての時間と呼ばれています。

は誰もが知っている、

  • それが理由です

  • どうすれば修正できますか?
+0

はこれが発生する可能性がありますように、データ$input = file_get_contents('php://input');

  • デコードデータは$decoded_input = urldecode($input);
  • 最後に、それをデコードし得るが、デシリアライゼーション失敗する。あなたが実際にコンソールを使ってこれをデバッグし、 'error'ハンドラ関数に渡されたパラメータが診断のためのエラーメッセージを得ることができます。 –

  • +0

    あなたの反応を表示できますか?あなたはjson形式で応答を設定していないようです。 –

    +0

    @PankajMakwana * "Ajax呼び出しのデータに' JSON.stringify'を使う必要はありません "* < - 彼らは投稿したい場合に行います'json'フィールドのJSON文字列値です。 – Phil

    答えて

    2

    ほとんどの場合、問題はこの行にあります。dataType: 'json',これはJsonの応答を期待しており、HTMLまたはテキストのテキスト応答を送信しているためです。のは、定義最初のを見てみましょう:

    • JSON.stringify文字列でJSONテキストJSONテキストとストアにJavaScriptオブジェクトをオンにします。

    • contentTypeは、特定の形式を指定してサーバーに送信されるヘッダーです。

    • dataTypeあなたは、どのような応答を期待しているかをjQueryに伝えていますか?

    例:

    あなたのような何かを掲示している場合:{"name":"John Doe"}と背面期待:{"success":true}その後

    はあなたが持っている必要があります。詳細については

    var data = {"name":"John Doe"}; 
    dataType : "json", 
    contentType: "application/json; charset=utf-8", 
    data : JSON.stringify(data), 
    

    Check jQuery Docs

    解決策1:(テスト)

    • だけdataType: 'json',行を削除し、jQueryのデータ型を決定しましょう。(それは特定にかなり良い仕事をしていません)または側面(クライアントおよびサーバー)の両方で正しいデータ型を使用してください

    解決方法2:(テスト)

    のjQuery:

    var name = $('#name').val(); 
    var email = $('#email').val(); 
    var password = $('#password').val(); 
    $.ajax({ 
        type: 'POST', 
        url: 'ajax.php', 
        dataType : "html", //assuming you need html response like '<div>Success</div>' 
             //Common types: html, xml, json & text 
        cache: false, 
        data: { json : encodeURIComponent(JSON.stringify({ 
         name:name, 
         email:email, 
         password:password 
        }))}, 
    
    
        success: function(){ 
         alert('request successful'); 
        }, 
    
        error: function(){ 
         alert('error occured'); 
        } 
    
    }); 
    

    PHP:

    $json_data = json_decode(urldecode($_POST['json'])); 
    //now $json_data variable has decoded JSON data 
    echo $json_data->name; 
    

    ソリューション3:(テストしていない)

    contentTypeを設定することで、JSONオブジェクトを送る:

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

    のように、その後php://inputNOTE使用して、生の入力を読み込む:$ _POSTはここで働いていないだろうし)

    ここにある方法:

    PHPファイルに header('Content-Type: application/json; charset=UTF8');
  • をコンテンツタイプを設定し
    • 要求が動作するかどうかJSONオブジェクト$data = json_decode($input);
  • +0

    a)jQueryで 'encodeURIComponent'を使う必要はありません。それはあなたのために行いますので、データを二重にエンコードするだけです。 b) '$ _POST'または' $ _GET'プロパティに 'urldecode'を使う必要はありません。リクエストからのデータは既に復号されています – Phil

    +0

    @Philおそらくあなたが正しいです。しかし、データはjson文字列のようにサーバー上で起こっていました。そこで、encodeするために 'encodeURIComponent'を追加し、サーバ側でデータがデコードされなかったので、' urldecode' BTWを使用しました.OPがエンコーディングを望んでいるかどうかわかりません。 –

    +0

    @Atlas_Gondalこれは私が探していたものです。感謝のバンドル:) – Alena

    関連する問題