@Andrey_87

Как правильно перенести массив с php json в ajax?

Сломал себе голову уже, я новичек в этом.
Как правильно перенести массив с php json в ajax?
Вот кусок кода php
$data['options'] = array();
			foreach ($this->model_catalog_product->getProductOptions($_POST['calc_id']) as $option) {
				$product_option_value_data = array();

				foreach ($option['product_option_value'] as $option_value) {
					if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
		
						if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
							$price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax') ? 'P' : false));
						} else {
							$price = false;
						}
						$json['calc_ids']['product_option_value_data']['product_option_value_id'][] = $option_value['product_option_value_id'];
						$json['calc_ids']['product_option_value_data']['option_value_id'][] = $option_value['option_value_id'];
						$json['calc_ids']['product_option_value_data']['name'][] = $option_value['name'];
						$json['calc_ids']['product_option_value_data']['price'][] = $price;
						$json['calc_ids']['product_option_value_data']['price_prefix'][] = $option_value['price_prefix'];
					}
				}
				$json['calc_ids']['options']['product_option_id'][] = $option['product_option_id'];
				$json['calc_ids']['options']['product_option_value'][] = $product_option_value_data;
				$json['calc_ids']['options']['option_id'][] = $option['option_id'];
				******* $json['calc_ids']['options']['name'][] = $option['name']; *******
				$json['calc_ids']['options']['type'][] = $option['type'];
				$json['calc_ids']['options']['value'][] = $option['value'];
				$json['calc_ids']['options']['required'][] = $option['required'];
			}
				}
	
		$this->response->setOutput(json_encode($json));


вот ajax

$(document).ready(function () {

    $('#calc_id').change(function () {
    
        var calc_id = $(this).val();
		
        $('#option_id').attr('disabled', true);
        $('#option_id').html('<option>загрузка...</option>');
		
		$.ajax({
			url: 'index.php?route=module/featured/write',
			type: 'post',
			dataType: 'json',
			data: 'calc_id='+calc_id,			
			success: function (data) {
			
				var obj = eval(data);
				 
                     
                var options = '';
				
						    $(obj.calc_ids.options.name).each(function() {
                    *******  alert(obj.calc_ids.options.name);  *********
                        options += '<option value="">' + obj.calc_ids.options.name + '</option>';
                    });
                    	$('#option_id').html(options);
                    $('#option_id').attr('disabled', false);			
			}
		});
		
    });
});


Звездочками отметил то что пытаюсь вывести. Только почему выводится все переменные через запятую, но выводиться столько раз сколько с массиве переменных (как и должно быть), только вот почему сразу все через запятую.
  • Вопрос задан
  • 390 просмотров
Решения вопроса 1
@Andrey_87 Автор вопроса
Разобрался наконец то
var obj = eval(data);

                var options = '';
				
						    $(obj.calc_ids.options.name).each(function(index) {
                      alert(data['calc_ids']['options']['name'][index]);
                        options += '<option value="">' + data['calc_ids']['options']['name'][index] + '</option>';
                    });


Я внутри цикла не сказал ему что выводить, и он выводил мне весь цикл через запятую. Добавил значение index и все заработало. Спасибо всем за ответы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kirill_782
@kirill_782
Днем я Маринетт
Нужно, чтобы был объект а не массив. Т.е в json первым символом должен быть { а не [. Занесите все данные в какой-нибудь массив, например response, а потом кодирцйте в json. Тоже голову долго ломал.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы