2017-06-23 81 views
1

我正在發送一個包含多個數組的AJAX請求,我無法弄清楚如何獲取數據?從AJAX獲取PHP中的JSON數組請求

這是我送:

enter image description here

我通過一個jQuery AJAX POST的PHP文件做這個..一個人怎麼會去從這裏抓取的數據?

謝謝!

- 編輯!

這是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代碼嗎?你也可以嘗試'var_dump($ _ POST);'在PHP端查看它是否真的是空的。 –

回答

0

假設POST請求到PHP文件是成功的你可以通過使用$ _POST變量來訪問它。

+0

雖然會有什麼跟隨$ _POST變量?我試過$ _POST ['data'],它似乎不工作? –

+0

您需要解碼json,如同其他答案中的人說的。什麼是json_decode($ _ POST);給你? – hdifen

+0

執行:var_dump($ json_decoded)其中$ json_decoded = json_decode($ _ POST ['data'])檢索:NULL –

1

要閱讀在PHP端的JSON編碼的數據:

<?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); 

您可以訪問$data['ids1']$data['ids2']

確實沒有任何好的理由來發送數據作爲JSON。您可以將原始對象直接放入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 }); 
    } 
}); 

有在您發佈的代碼中發現了一些語法錯誤,這些錯誤在我的答案中包含的代碼中已得到糾正,但最重要的是,我已將您的數據修改爲全部編碼。看起來你正在試圖將JSON對象與編碼爲application/x-www-form-urlencoded的標準數據結合起來。我已經在上面的代碼中對此進行了標準化,因此所有數據均發佈爲application/x-www-form-urlencoded

在你的PHP,你就可以訪問此爲:

<?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({ 
    type: "POST", 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 

我認爲有數據之間的錯誤是Ajax對象的屬性和數據是在財產的發佈數據。

請發佈您的jQuery代碼。