Отправка многомерного массива с помощью jQuery и YUI - PullRequest
0 голосов
/ 26 января 2011

Эй, ребята, это действительно беспокоит меня сейчас, так что если вы могли бы помочь мне, это было бы удивительно.

Я использую jQuery и YUI и пытаюсь отправить многомерный массив через json в php, но по какой-то причине я не могу получить текст для помещения в массив из span! Пойди разберись! Независимо от того, как я стараюсь, я не могу добавить это. Если я вручную добавлю тестовые данные в WeekDays 0 =, и это сработает, но по какой-то причине он не получит текст из диапазона!

Оповещение о клике работает и выводит информацию из диапазона, но я не могу установить значение массива

function checkDay(checkbox) {
    var checked = '0';
    if ($('#' + checkbox).is(':checked')) {
        checked = '1';
    } else {
        checked = '0';

    }
    return checked;
}


var WeekDays = new Array(7);
WeekDays[0] = new Array();
WeekDays[0][0] = checkDay('chxMonday');
WeekDays[0][2] = $('#results22Monday').text();
WeekDays[1] = new Array();
WeekDays[1][0] = checkDay('chxTuesday');
WeekDays[1][3] = new Array();
WeekDays[1][4] = $('#results22Tue').text();
WeekDays[2] = new Array();
WeekDays[2][0] = checkDay('chxWednesday');
WeekDays[2][5] = $('#results22Wednesday').text();
WeekDays[3] = new Array();
WeekDays[3][0] = checkDay('chxThursday');
WeekDays[3][6] = $('#results22Thursday').text();
WeekDays[4] = new Array();
WeekDays[4][0] = checkDay('chxFriday');
WeekDays[4][7] = $('#results22Friday').text();
WeekDays[5] = new Array();
WeekDays[5][0] = checkDay('chxSaturday');
WeekDays[5][8] = $('#results22Saturday').text();
WeekDays[6] = new Array();
WeekDays[6][0] = checkDay('chxSunday');
WeekDays[6][9] = $('#results22Sunday').text();



WeekDays = YAHOO.lang.JSON.stringify(WeekDays);


$('#btnUpdateSettings').click(function () {
    alert($('#results22Tue').text());
    $.ajax({
        data: {
            contactID: d.act_contactID,
            apiCPolicy: $('[name=txtCpolicy]').val(),
            apiNewRegistrations: $('[name=rdoRegister]').val(),
            apiInterval: $('[name=cboBooking]').val(),
            apiMaxDate: $('[name=cboMaxDate]').val(),

            apiTimes: WeekDays,

            method: 'updateWebBooking',
            dataType: 'json'
        },
        success: function () {
            console.log("welldone, you've updated!");
        },
        error: function () {
            alert("ooooppps!");
        }
    });
});

Когда я проверяю логотип консоли, я получаю экран ниже, показывающий, что массив пуст.

enter image description here

Я отметил место, где я хочу, чтобы текст появлялся, но его там нет! Это так бесит. То же самое относится ко всем остальным результатам массива

Любые идеи, которые вы действительно помогли бы мне

UPDATE

предупреждение работает и выводит, как показано ниже, но оно просто не добавлено в массив! enter image description here

Так что я все еще не мудрый, его не добавляют.

UPDATE

Это действительно странно, у меня есть индекс, установленный ниже, но когда я вставил свой код в вопрос в первый раз, когда индекс был изменен! Странный! Во всяком случае, это не работает, когда индексы массива верны!

var WeekDays = new Array(7);
            WeekDays[0] =  new Array();
            WeekDays[0][0] = checkDay('chxMonday');
            WeekDays[0][1] = $('#results22Monday').text();
            WeekDays[1] =  new Array();
            WeekDays[1][0] = checkDay('chxTuesday');
            WeekDays[1][1] = new Array();
            WeekDays[1][1]  = $('#results22Tue').text();
            WeekDays[2] =  new Array();
            WeekDays[2][0] = checkDay('chxWednesday');
            WeekDays[2][1] =  $('#results22Wednesday').text();
            WeekDays[3] =  new Array();
            WeekDays[3][0] = checkDay('chxThursday');
            WeekDays[3][1] = $('#results22Thursday').text();
            WeekDays[4] =  new Array();
            WeekDays[4][0] = checkDay('chxFriday');
            WeekDays[4][1] = $('#results22Friday').text();
            WeekDays[5] =  new Array();
            WeekDays[5][0] = checkDay('chxSaturday');
            WeekDays[5][1] = $('#results22Saturday').text();
            WeekDays[6] =  new Array();
            WeekDays[6][0] = checkDay('chxSunday');
            WeekDays[6][1] = $('#results22Sunday').text();

UPDATE

Хорошо, я чувствую, что мне нужно дать вам более подробный вопрос, чтобы объяснить вам, что я пытаюсь сделать, поскольку, вероятно, есть гораздо более красноречивый способ достижения этой цели. изображения ниже, вероятно, лучший способ показать это. Когда я нажимаю кнопку обновления таблицы, она заполняет пустую область справа таблицей, которая включает флажки, которые с определенными приращениями установлены ранее в форме. Эти флажки я хочу сохранить вместе с тем, был ли установлен флажок для этого дня. Если этот день не отмечен, я хочу, чтобы таблица была очищена, чтобы данные не отправлялись в базу данных за этот день. Вот почему я хотел сохранить их в многомерном массиве, а затем сериализовать их, но я не могу заставить его работать

enter image description here enter image description here enter image description here enter image description here enter image description here

Ответы [ 2 ]

1 голос
/ 26 января 2011

Пожалуйста, попробуйте предупредить - $ ('# results22Monday'). Text ();
Потому что, на мой взгляд, виноват .text ().
Как видите, JSON создан в правильном формате (массив 7,2) и функция checkDay правильно заполняет значения.

Поэтому, пожалуйста, проверьте

  1. какой HTMLElement является результатами 22 понедельника и других?
  2. есть ли у него текст? или вам нужен val ()?

О, мы хотели массив размером 7 x 2, верно?

Если это так, индексация дочернего массива неверна.
Попробуйте изменить эту строку и скажите, отображается ли первое значение на консоли firebug?

WeekDays[0][2] = $('#results22Monday').text();
до
WeekDays[0][1] = $('#results22Monday').text();

Смотрите, мы хотели, чтобы результаты 22 Понедельника для некоторых были вторым элементом дочернего массива (т.е. с индексом 1)

Я бы также переписал верхнюю часть вашего кода, так как он намного чище.

function checkDay(checkbox) {
    return ($('#' + checkbox).is(':checked')) ? '1' : '0';
}


var WeekDays = new Array(7);
WeekDays[0] = [checkDay('chxMonday'), $('#results22Monday').text()];
WeekDays[1] = [checkDay('chxTuesday'), $('#results22Tue').text()];
WeekDays[2] =  [checkDay('chxWednesday'), $('#results22Wednesday').text()];
WeekDays[3] =  [checkDay('chxThursday'), $('#results22Thursday').text()];
WeekDays[4] =  [checkDay('chxFriday'), $('#results22Friday').text()];
WeekDays[5] =  [checkDay('chxSaturday'), $('#results22Saturday').text()];
WeekDays[6] =  [checkDay('chxSunday'), $('#results22Sunday').text()];

//as its not a good practice to re-initialise the same variable
var jsonedWeekDays = YAHOO.lang.JSON.stringify(WeekDays);
0 голосов
/ 26 января 2011

Не знаю, но вы можете использовать .serializeArray() вместо YAHOO.lang.JSON.stringify().

, и ваша функция checkDay() лучше написана таким образом,

function checkDay(checkbox) {
    return $('#' + checkbox).is(':checked') ? 1 : 0;
}

и к вашей проблеме, я думаю, вы просто забыли обернуть его в .ready() обработчик

демо

с .ready() - работает нормально, предупреждает текст.

без .ready() - не предупреждал текст.

если проблема не устранена, возможно, нам нужно ещеинформация / коды от вас, которые, по вашему мнению, помогут нам решить проблему.

...