2013-08-13 5 views
2

Я пытаюсь передать этот массив, заполненный объектами:Как добавить переменную в конец ключа объекта?

var steps = [ 
    { 
     bla: blu, 
     bla: blu, 
     bla: blu 
    }, 
    { 
     // etc.. 3 more times same format 
    } 
]; 

в мой контроллер CodeIgniter с помощью функции JQuery в $ .ajax().

Я пробовал так:

$.ajax({ 
    url: base_url + 'index.php/worldmap/ajax/start_travelling', 
    type: 'POST', 
    data: { 
     steps: steps 
    }, 
    success: function(response){ 
     console.log(response); 
    } 
}); 

но я получил TypeError и обнаружил, что объект данных передается в контроллер должен быть в ключе => значение формата. Я читал, что он принимает один объект.

Итак, я понял, что если я пройду количество шагов и каждый шаг по отдельности, я снова их объединю в массив в моем контроллере codeigniter.

Так что я закончил с:

var dataToSend = { 
    num_steps: steps.length 
}; 

var i = 1; 

$.each(steps, function(index, value)){ 
    dataToSend.step+i = value; // I want the key to be step_1, step_2 etc.. 
    i += 1; 
}; 

$.ajax({ 
    url: base_url + 'index.php/worldmap/ajax/start_travelling', 
    type: 'POST', 
    data: dataToSend, 
    success: function(response){ 
     console.log(response); 
    } 
}); 

но, как вы, вероятно, может угадать .step + 1 не похоже на работу. Какой правильный синтаксис делать то, что я пытаюсь сделать? Или, если кто-то знает лучший способ передать многоуровневый массив моему контроллеру ci, пожалуйста, поделитесь: D

+0

* 'х + у = z' никогда не будет работать в JavaScript * Левая рука символом' = 'должен быть «присваивается» (он должен быть оценен как тип ссылочной спецификации). Это означает, что это должно быть * variable * или * свойство *, но не произвольное выражение. Теперь помните, что как 'data.x', так и' data ["x"] '(hint:" x "может быть любой строкой в ​​последнем случае) представляют свойство (когда данные называют объект), а массивы могут быть просто проиндексированы 'data [idx]' (который по-прежнему остается лишь свойством). – user2246674

+0

Спасибо за быстрый ответ! Я использовал dataToSend ["step _" + i] = значение, и он работает. Еще раз спасибо ^^ – Haskabab

+0

Рад, что он работает: D Если вообще возможно, я бы использовал массив, чтобы его можно было записать как 'dataToSend [i]' (вместо того, чтобы иметь свойства step_0, step_1, step_x ..). Обычно массивы должны использоваться для повторения последовательностей, тогда как (нормальный) Object/Properties должен использоваться для фиксированного набора именованных значений. – user2246674

ответ

0

Ваш объект JSON правильно сформирован, вы должны быть в состоянии прочитать данные с PHP, вы могли бы предоставить более подробную информацию php-код.

Единственное, что вы можете упустить это stringify данные:.

var steps = [ 
    { 
     bla: blu, 
     bla: blu, 
     bla: blu 
    }, 
    { 
     // etc.. 3 more times same format 
    } 
]; 

var dataToSend = { steps: steps }; 

$.ajax({ 
    url: base_url + 'index.php/worldmap/ajax/start_travelling', 
    type: 'POST', 
    data: JSON.stringify(dataToSend), 
    success: function(response){ 
     console.log(response); 
    } 
}); 
+0

Это было именно то, чего я пропустил, спасибо большое! Извините за задержку с ответом. – Haskabab

Смежные вопросы