2014-08-28 8 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

Вы должны всегда использовать 'encodeURIComponent' при добавлении сложных параметров в URL , Или дайте объект jQuery, и он автоматически сделает кодировку. – Barmar

ответ

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

+0

почему -1? вы получите комментарий – helle

+0

А что, если у него есть это? Откуда вы знаете? – helle

0

Ваш параметр АЯКС недостающую функцию успеха 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

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); 
?> 
Смежные вопросы