2016-03-21 8 views
1

こんにちは、私は、JavaScriptのオブジェクトに保存されたフィールドをPHPサーバに送信しようとしています。私はajaxを使用していますが、私はPHPでオブジェクトを受信しようとすると、デバッグ時に長さ0を取得します。基本的に私はデータを受け取ることができません。私は間違って何をしたのですか?PHPサーバがajaxを使用してjavascriptオブジェクトを受け取ることができません

Javascript code: 
    //fields from from saved in an object. 
    var obj={ 
     'user_name': username, 
     'pwd': psswd1, 
     'user_email': email, 
     'user_phone': mobile, 
     'sec_quest1': question1, 
     'ans1': answer1, 
     'sec_quest2': question2, 
     'ans2': answer2, 
     'user_address': address, 
     'user_userInfo': user_info 
    }; 

    console.log(obj); 

    var data = JSON.stringify(obj) 
    var xhttp = new XMLHttpRequest(); 

    xhttp.onreadystatechange = function() { 
if (xhttp.readyState == 4 && xhttp.status == 200) { 
//document.getElementById("txtHint").innerHTML = xhttp.responseText; 
    alert(xhttp.responseText); 
    } 
} 
xhttp.open("POST", "server.php", true); 
xhttp.setRequestHeader("Content-type", "application/json"); 
xhttp.send(data); 
} 

PHPコード:

<?php 
    $obj = json_decode($_POST["data"]); 
echo 'Name: '.sizeof($obj); 
?> 

それがデータを受信して​​いないという意味ゼロのサイズを表示します。してください私は間違っ

+0

試し 'のvar_dump($ _ POST)が'含まれるでしょう。あなたが定義していないので、あなたは 'data'という名前のフォームフィールドにアクセスしようとしていますが、送信されません。 –

+0

@macılay私は変数名をとり、javascriptオブジェクトに格納し、順番にajaxを使用してデータをPHPに送信します。 –

+0

@ma crayが正しいです。あなたは$ _POST ['user_name']、$ _POST ['user_phone']などのフィールドにアクセスできます。$ _POST ['data']変数はありません – KyleK

答えて

2

このようにPHPでアクセスすることができ、サーバーにJSONを投稿するときあなたがする必要があるので、あなたはポスト変数にアクセスカントこの。

$str = file_get_contents('php://input'); //($_POST doesn't work here) 
$response = json_decode($str, true); 

そして、上記techblu3として

$name = $response['user_name']; 
$phone = $response['user_phone']; 
// etc 
// or just $response[0], $response[1], $response[2] etc etc 

基本的に同じ答えが、もう少し詳細なフィールドを取得。

+0

jQueryを使用することはできませんでした。 –

+0

感謝しました。したがって、$ _POSTはフォーム –

+0

Yupからデータを取得するためのものです。いつでもリクエストはapplication/json – KyleK

2

をしましたあなたは、生のデータを掲載する可能性がある、

$obj = json_decode(file_get_contents("php://input"),true); 
    // true parameter is used to decode as array 
    // you can make it false to use object 
    echo $obj["user_name"]; 
+0

に感謝しましたが、JSON.stringifyを使用してオブジェクトを文字列として渡しました –

+0

ありがとうございました。ですから、file_get_contentsと_ $ POSTのどちらの方が良いでしょうか? –

+1

jsonを使用している場合は、file_get_contents( "php:// input")が良いです。 私はこれをお勧めします – techblu3

0

データをシリアル化して、x-www-form-urlencodedというヘッダーで送信することができます。

serialize = function(obj) { 
    var str = []; 
    for (var p in obj) 
    if (obj.hasOwnProperty(p)) { 
    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
    } 
    return str.join("&"); 
} 
var obj = { 
    'user_name': 'John Doe', 
    'user_email': '[email protected]', 
    'user_phone': '2122221111', 
}; 

    var params = serialize(obj); 
    var url = "https://url.net"; 


    console.log(params); 

    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", url, true); 

    //Send the proper header information along with the request 
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

    xhr.send(params); 

あなたのPHPファイルは

<?php echo 'Name: '.sizeof($_POST); ?> 
関連する問題