Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > В ajax пост запросе отправить двумерный массив


Автор: mstdmstd 8.9.2016, 12:46
Всем привет,

В ajax пост запросе нужно отправить двумерный массив
Для формирования массива делаю :
Код

    var attrs_checked_list= []
    var j= 0

    var l= this_attrs_options_list.length
    for( i= 0; i< l; i++ ) {
        var attr_name = this_attrs_options_list[i]['attr_name']
        var next_class_name= 'input.nsn_woo_ext_search_cbx_'+attr_name+'_selection_filters:checked'
        $(next_class_name).each(function () {
            var attrItem = []
            attrItem['attr_name'] = attr_name;
            attrItem['value'] = $(this).val();
            attrs_checked_list[j]= attrItem
            j++
        });
    }


Код

И запрос :
    $.ajax({
        url: ajax_object.frontend_ajaxurl,
        dataType: "json",
        type: 'post',
        data: {
            //attrs_checked_list: encodeURIComponent(attrs_checked_list),   // если раскаментарить - выдает ошибку
            attrs_checked_list: JSON.stringify( attrs_checked_list ),
            prices_list: prices_list,


С использованием JSON.stringify( на сервере получаю
Код

[[],[],[]]

Да и строка
    alert( "::"+var_dump( JSON.stringify( attrs_checked_list ) ) )
выводит 
Код

[[],[],[]]


А как правильно ?

  Спасибо !

Автор: mstdmstd 10.9.2016, 08:40
Решение нашел в передаче в запрос в виде двумерного массива, но без строковых индексов:
Код

    var params_attrs_checked_list= Array();
    for( i = 0; i< attrs_checked_list.length; i++ ) {
        params_attrs_checked_list[i] = new Array(2);
        //params_attrs_checked_list[i]["attr_name"]= attrs_checked_list[i].attr_name  // Если раскоментарить эти 2 строки и закоментарить 2 строки ниже то ошибки при
        //params_attrs_checked_list[i]["value"]= attrs_checked_list[i].value          // выполении нет - но массив на сервер не передается
        
        params_attrs_checked_list[i][0]= attrs_checked_list[i].attr_name              // Так работает нормально
        params_attrs_checked_list[i][1]= attrs_checked_list[i].value

    ...

    $.ajax({
        url: ajax_object.frontend_ajaxurl,
        dataType: "json",
        type: 'post',
        data: {
            action: 'save_bookmark',
            attrs_checked_list: params_attrs_checked_list,
    ...


?

Автор: _zorn_ 12.9.2016, 14:09
Зависит от принимающей стороны. С чего вы решили что он должен правильно интерпертировать _ваши_ "двумерные массивы со строковыми ключами" ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)