Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите дописать функцию, чтобы ajax запрос не возвращал [object Object] (https://javascript.ru/forum/misc/77371-pomogite-dopisat-funkciyu-chtoby-ajax-zapros-ne-vozvrashhal-%5Bobject-object%5D.html)

Artur_Hopf 24.04.2019 07:47

Помогите дописать функцию, чтобы ajax запрос не возвращал [object Object]
 
Добрый день. Имеется массив такой структуры:
var a = [];
a['operationName'][0] = {'operation': 1 , 'name': 2, 'time': 3};
a['pf1'] = 1;
a['pf2'] = 2;
};


Есть функция для отправки post запроса. Ее вроде как нужно доделать чтобы можно было отправить такой массив.
function postAjax(url, data, success) {
    var token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
    var params = typeof data == 'string' ? data : Object.keys(data).map(
            function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }
        ).join('&');
 
    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    xhr.open('POST', url);
    xhr.onreadystatechange = function() {
        if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
        if (xhr.status==500) { console.log(xhr.responseText); }
    };
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.setRequestHeader('X-CSRF-Token', token);
    xhr.send(params);
    return xhr;
}


Если я просто отправлю свой массив в php таким образом:
postAjax('index.php?r=post/insert-check-list', a, function(data){
      var json = JSON.parse(data);
      console.log(json);
});


То вернется такой ответ:
operationName: "[object Object]"
pf1: "1"
pf2: "2"


В php происходит просто:
public function actionInsertCheckList(){
        $result = $_POST;
        return json_encode($result);
}

Подскажите пожалуйста что делаю не так?:-?

ksa 24.04.2019 07:54

Цитата:

Сообщение от Artur_Hopf (Сообщение 506978)
Добрый день. Имеется массив такой структуры:
var a = [];
a['operationName'][0] = {'operation': 1 , 'name': 2, 'time': 3};
a['pf1'] = 1;
a['pf2'] = 2;
};

Почитай внимательно про массивы... ;)
https://learn.javascript.ru/array

А потом про объекты...
https://learn.javascript.ru/object

Artur_Hopf 24.04.2019 08:27

ksa,
и?
Цитата:

В массиве может храниться любое число элементов любого типа.

В том числе, строки, числа, объекты, вот например:

// микс значений
var arr = [ 1, 'Имя', { name: 'Петя' }, true ];

// получить объект из массива и тут же -- его свойство
alert( arr[2].name ); // Петя

laimas 24.04.2019 08:42

Цитата:

Сообщение от Artur_Hopf
Имеется массив такой структуры

Не может быть такой структуры. Посмотрите в отладчике и на строку a['operationName']... сразу будет выдана ошибка.

Artur_Hopf 24.04.2019 09:13

Хорошо ,всем спасибо, отправил по другому :)

ksa 26.04.2019 07:32

Цитата:

Сообщение от Artur_Hopf
В массиве может храниться любое число элементов любого типа.
В том числе, строки, числа, объекты, вот например

"Храниться" и быть "ключем/индексом" это кагбэ разные вещи... ;)

Т.ч. повторюсь - ты еще не понял, что такое массивы.


Часовой пояс GMT +3, время: 19:02.