2014-08-28 126 views
0

我有一堆需要傳遞給服務器的值,而且我似乎無法獲得像JSON解碼這樣的基本功能。有什麼東西是在這裏,我會感謝有人看看它如何將JavaScript對象的數組傳遞給PHP?

我有一個動態生成的表與可編輯的值,當用戶單擊添加按鈕時,抓住它,將其推入一個數組,並將其發送到服務器與Ajax呼叫。以下是我從console.log(data)複製的樣本數據;線。

var data = params + "&Details="+JSON.stringify(Details); 
console.log(data);  // &Id[]=1566&aId[]=1567&Details=[["1566","First File","sdf.pdf","general","file","",""],["1567","2nd file","test.png","image","file","",""]] 

$.ajax({ 
    type: 'POST', 
    url: editUrl, 
    dataType: 'json', 
    data: data, 
    success: function() { console.log('success'); } 
    error: function() { console.log('error'); } 
}); 

在服務器端,我得到的數據,但我不能把它解析成可用的格式

$ids = ($_POST['Id']); // this is a valid array 
$details = ($_POST['Details']);  // [[ 1566 , First File , , general , file , , ],[ 1567 , 2nd file , , image , file , , ]] 
$details = json_decode($details); // getting JSON_ERROR_CTRL_CHAR error and null is returned 

任何想法在這裏是怎麼回事?

+0

到URL添加複雜的參數時,您應該總是使用'encodeURIComponent' 。或者給jQuery一個對象,它會自動完成編碼。 – Barmar 2014-08-28 20:50:43

回答

1

您需要正確編碼JSON:

var data = params + "&Details="+encodeURIComponent(JSON.stringify(Details)); 

然而,這將是更好的,恕我直言,以使data的對象,而不是字符串。

var data = { 
    Id: [ 1566, 1567], 
    Details: JSON.stringify(Details) 
}; 

你需要改變你如何創建params所以它產生的對象也是如此。然後你可以使用$.extend()合併它們:

var data = $.extend({}, params, { Details: JSON.stringify(Details) }); 
-2

嘗試json_decode(stripslashes($details))

+0

只有當他的配置啓用了'magic_quote_gpc'時才需要。 – Barmar 2014-08-28 20:51:46

+0

爲什麼-1?你的shell提供了一條評論 – helle 2014-08-28 21:22:11

+0

而且如果他啓用了該怎麼辦?你怎麼知道的? – helle 2014-08-29 07:46:47

0

你的Ajax參數缺少comma後成功的功能,並嘗試從服務器成功的定義回調函數的數據,然後使用json_encode在PHP服務器的陣列中的數據。

$.ajax({ 
    type: 'POST', 
    url: editUrl, 
    dataType: 'json', 
    data: data, 
    success: function(data) { console.log(data); }, 
    error: function() { console.log('error'); } 
}); 
+0

這必須是複製錯誤,因爲如果沒有逗號,Javascript甚至不會運行。 – Barmar 2014-08-28 20:52:30

0

不知道你是如何構建params變量或爲什麼。但是,如果只是通過ajax發送,你不需要。 Ajax的數據參數將爲你做到這一點。給它一個你想要發送的名字/值對的對象。

$.ajax({ 
    type: 'POST', 
    url: editUrl, 
    dataType: 'json', 
    data: { 
    Id: [2566], 
    aId: [1567], 
    Details: Details, 
    Other: 'Hi', 
    AnotherId: 1234 
    } 
    success: function() { console.log('success'); } 
    error: function() { console.log('error'); } 
}); 

在服務器上看看所有的$ _POST變量來得到一個什麼樣被送到一個想法和格式

<?php 
    echo '<pre>' 
    print_r($_POST); 
?> 
相關問題