2014-09-13 3 views
1

У меня есть проект, который выплескивает строку json_encode элементов даты.php вывод в массив javascript с json

выглядит так:

<input type="hidden" class="avail_dates" data-id='["12-9-2014", "7-9-2014"]' /> 

Я пробовал разные вещи, но из-за этого проекта он должен быть там, я не могу просто сделать вызов AJAX и вернуть json_encode материал.

Итак, мне нужно получить идентификатор данных в массив javascript как-то для datePicker.

Используя это работает, но это жестко:

var availableDates = ["9-9-2014","5-9-2014","7-9-2014"]; 

Использование этого не делает ничего:

var availableDatesArray = jQuery('.avail_dates').attr('data-id'); 
//alerting gives ["9-9-2014","5-9-2014","7-9-2014"] 

Есть ли способ, чтобы преобразовать строку в массив, который работает?

Я могу изменить способ ввода данных в идентификатор данных или способ взаимодействия jquery с этим элементом, но я не могу добавить отдельный запрос ajax только для этого, он должен исходить из этого идентификатора данных ,

var availableDates = ["9-9-2014","5-9-2014","7-9-2014"];  

function dates(date){ 
    dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear(); 
    console.log(dmy+' : '+(jQuery.inArray(dmy, availableDates))); 
    if (jQuery.inArray(dmy, availableDates) != -1) { 
     return [true, "","Available"]; 
    } 
    else { 
     return [false,"","unAvailable"]; 
    }   
    return; 
} 

jQuery('#myDates').datepicker({ 
changeYear: true, 
maxDate: '0', 
changeMonth: true, 
dateFormat: "mm/dd/yy", 
yearRange: '2014:2030', 
beforeShowDay: dates,  
onSelect: function(dateText) { 

} 
}); 

EDIT: Если есть упоминание я уже пробовал JSON.parse. Это дает ошибку «неожиданного числа».

EDIT 2: Я добавил функцию, которую я пытаюсь передать данные для jQuery datePicker.

+0

Похоже на: http://stackoverflow.com/questions/13272406/javascript-string-to-array-conversion – BobbyShaftoe

+0

Я не могу воспроизвести вашу ошибку «неожиданного числа», используя 'JSON. parse'. Можете ли вы предоставить jsfiddle? –

+0

@David, JSON.parse отлично работает здесь, используя html, показанный http://jsfiddle.net/js3qnae1/ – charlietfl

ответ

2

Да, вы можете использовать JSON.parse. Как это:

var availableDatesArray = jQuery('.avail_dates').attr('data-id'); 
availableDatesArray = JSON.parse(availableDatesArray); 
console.log(availableDatesArray); 

Или намного лучше предложению @charlie

var availableDatesArray = jQuery('.avail_dates').data('id'); // much better 
+3

не нужно использовать' JSON.parse() ', если use' jQuery.data() 'будет читать его как массив, если он действителен JSON и обрабатывать его внутри – charlietfl

+0

Должен упомянуть, что я уже пробовал json.parse. Он дает ошибку« неожиданного числа » – David

+0

Форматы как «9-9-2014,5-9-2014,7-9-2014», по-видимому мне нужны скобки и двойные кавычки для этой функции, чтобы работать – David

2

Просто используйте JSON.parse.

Пример:

var availableDatesArray = JSON.parse(jQuery('.avail_dates').attr('data-id')); 

Если вы предпочитаете, вы можете использовать jQuery.parseJSON.

Пример:

var availableDatesArray = jQuery.parseJSON(jQuery('.avail_dates').attr('data-id')); 

Это на самом деле, как сам JQuery разбирает JSON в ответах AJAX.

+0

json.parse дает мне ошибку, см. Правки – David

0

Если я не буду недопонимания вашего вопроса, вам просто нужно использовать JSON.parse:

var availableDatesArray = JSON.parse(jQuery('.avail_dates').attr('data-id')); 

jQuery('.avail_dates').attr('data-id') только собирается возвращать строку (содержимое атрибута «данные ид» JSON.parse будет на самом деле создать. объект JavaScript из него.

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