2017-06-23 10 views
1

複数配列のAJAXリクエストを送信していますが、データを取得する方法がわかりません。AJAXリクエストからPHPでJSON配列を取得

enter image description here

私はPHPファイルにjQueryのAJAX POSTを介してこれをやっているが...どのようにして、ここからデータをつかむに行くか:

これは私が送信してる何ですか?

ありがとうございました!

- EDIT !!

これはPHP側でJSONエンコードされたデータの読み取りにはjQueryの

var h1 = [] 
h2 = [] 
h3 = [], 
layout = $("input[type=radio][name='layout_option']:checked").val(); 

$("ul.widget-order[name='1'] li").each(function() { h1.push($(this).attr('id')); }); 
$("ul.widget-order[name='2'] li").each(function() { h2.push($(this).attr('id')); }); 
$("ul.widget-order[name='3'] li").each(function() { h3.push($(this).attr('id')); }); 

var sendData = JSON.stringify({ 
    ids1: " " + h1 + "", 
    ids2: " " + h2 + "", 
    ids3: " " + h3 + "" 
}); 

$.ajax({ 
    type: "POST", 
    url: "_backend/account/updateWidgets.php", 
    data: { data: sendData } + '&layout=' + layout, 
    success: function(data){ 
     $("#post_reply").html(data); 
     console.log({ data: sendData }); 
    )}; 
)}; 
+0

データを取得することはどういう意味ですか? PHPはそれを$ _POST変数とみなします。 – mkaatman

+0

@mkaatman私はそれを理解していますが、$ _POSTの後に何を置くのでしょうか?私はこれを試しています:$ _POST ['data']しかし、私は何も受け取りませんか? –

+0

POSTを送信するために使用しているjQueryコードを追加できますか?また、PHP側で 'var_dump($ _ POST);'を実行して、実際に空であるかどうか確認することもできます。 –

答えて

0

を$ _POST変数を使用してアクセスできます。

+0

しかし、$ _POST変数の後ろには何がありますか?私は$ _POST ['data']を試しましたが、うまくいきませんでしたか? –

+0

あなたは他の答えの男としてjsonを解読する必要があります。 json_decode($ _ POST)とは何ですか?あなたに? – hdifen

+0

Doing:var_dump($ json_decoded)$ json_decoded = json_decode($ _ POST ['data'])は次を取得します:NULL –

1

です:あなたのPHPファイルへのPOSTリクエストがあなたの成功であると仮定すると

<?php 

$json = file_get_contents('php://input'); 
$decodedJSON = json_decode($json); 

?> 

http://php.net/manual/en/function.json-decode.php

+0

こんにちは@Russellコードを追加しました。 –

+0

Barmarが投稿したものはあなたのために働くはずです。 – Russell

1

$_POST['data']にはJSONが含まれていますので、json_decode()を呼び出してください。

$data = json_decode($_POST['data'], true); 

今、あなたは、JSONなどのデータを送信するために何か良い理由は本当にありません$data['ids1']$data['ids2']など

にアクセスすることができます。オリジナルのオブジェクトをjQueryのdata:オプションに直接入れることができます。私は可能性がある場合、あなたはなど$_POST['ids1']$_POST['ids2']

$.ajax({ 
    type: "POST", 
    url: "_backend/account/updateWidgets.php", 
    data: { 
    ids1: " " + h1, 
    ids2: " " + h2, 
    ids3: " " + h3, 
    layout: layout 
    }, 
    success: function(data) { 
    $("#post_reply").html(data); 
    console.log({ 
     data: sendData 
    }); 
    } 
}); 
+0

お詫び申し上げます@Barmar今、jQueryを追加しました。別の見方をすることは可能でしょうか? –

+0

なぜ前部にスペースを連結していますか?最後に空の文字列を連結することは全く必要ありません。 – Barmar

0

などのパラメータにアクセスすることができます、私はあなたが以下にjQueryの要求を行っている方法を変更することはお勧めします:

var h1 = [] 
h2 = [] 
h3 = [], 
layout = $("input[type=radio][name='layout_option']:checked").val(); 

$("ul.widget-order[name='1'] li").each(function() { h1.push($(this).attr('id')); }); 
$("ul.widget-order[name='2'] li").each(function() { h2.push($(this).attr('id')); }); 
$("ul.widget-order[name='3'] li").each(function() { h3.push($(this).attr('id')); }); 

var sendData = JSON.stringify({ 
    ids1: " " + h1 + "", 
    ids2: " " + h2 + "", 
    ids3: " " + h3 + "" 
}); 
var sPayload = "data=" + encodeURIComponent(sendData) + "&layout=" + encodeURIComponent(layout); 
$.ajax({ 
    type: "POST", 
    url: "_backend/account/updateWidgets.php", 
    data: sPayload, 
    success: function(data){ 
     $("#post_reply").html(data); 
     console.log({ data: sendData }); 
    } 
}); 

ありましたあなたが投稿したコードのいくつかの構文エラーが私の答えに含まれているコードで修正しましたが、最も重要なのは、私はあなたのデータをすべて1つのエンコーディングに変更しました。 application/x-www-form-urlencodedとしてエンコードされた標準データとJSONオブジェクトを組み合わせようとしているようです。私は上記のコードでこれを標準化しているので、すべてのデータはapplication/x-www-form-urlencodedとして掲載されています。あなたのPHPで

、あなたがこれをアクセスすることができます。このコード

$.ajax({ 
    type: "POST", 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 

に従ってください

<?php 
// First, let's get the layout because that's the easiest 
$layout = (isset($_POST['layout']) ? $_POST['layout'] : NULL); 
// As a note, the isset(...) with ternary operator is just my preferred method for checking missing data when extracting that data from the PHP super-globals. 

// Now we'll need to get the JSON portion. 
$jData = $_POST['data']; 
$data = json_decode($jData, $assoc=true); 

echo "ids1 is " . $data['ids1'] . "\n<br>\n"; 
echo "ids2 is " . $data['ids2'] . "\n<br>\n"; 
echo "ids3 is " . $data['ids3'] . "\n<br>\n"; 
?> 
0

私は、データ間の間違いがあると思うAjaxオブジェクトのプロパティであり、データはあなたにプロパティです投稿データ。

jqueryコードを投稿してください。

関連する問題