Добавление Javascript объекта внутри существующего JSON массива - PullRequest
0 голосов
/ 05 мая 2020

Приношу извинения, если это кажется очевидным, но я потерялся в этом на несколько часов.

Я пытаюсь создать объект javascript и передать его на страницу PHP, используя JQuery s. ajax.

Объект JS выглядит так:

let transactions = {};
let counter = 0;
($.each loop) {
    transactions[counter] = {
        "code": code,
        "agency_number": agency_number,
        "agency_code": agency_code
    };
    counter++;
}

Затем мне нужно добавить его вместе с другим полем в массив JSON

let formData =  [{}];
    formData.push({name: 'page', value: aPage});
    formData.push({name: "transactions", value: JSON.stringify(transactions)});

Вызов AJAX, например:

let ajax_call=$.ajax({
                datatype: "json",
                method: "POST",
                url: "theURL",
                data: formData,
                timeout: 15000,
                async: true
            });
            ajax_call.done(function( data, textStatus, jqXHR ) {
               ... blah ...

, перенос транзакций в JSON .stringify, похоже, не работает. В конце PHP значение POST для транзакции выглядит так:

"{0:{CODE:300,AGENCY_NUMBER:20,AGENCY_CODE:50}}"

Без тиков, что не позволяет мне использовать json_decode. Он выводит «синтаксическую ошибку», как и ожидалось.

передавая ее как транзакции, без JSON .stringify дает результат:

formData.push({name: "transactions", value: transactions});

=

"[OBJECT OBJECT]"

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

Я ничего не делаю со значениями POST до этого момента. Вот как их получает страница PHP.

Любая помощь будет принята с благодарностью.

Спасибо!

Изменить - на самом деле ничего плохого с код здесь. Я ограничивал кавычки, а также другие специальные символы, от попадания на веб-сервер в IIS. Вот почему это происходило без них. Все хорошо, я просто тупой.

В остальном спасибо всем за помощь.

1 Ответ

0 голосов
/ 06 мая 2020

JQuery ajax .data может принимать обычные JS объекты. Вам не нужно создавать пары имя: значение и преобразовывать что-либо в строку.

Это должно работать лучше:

const formData = {
    page: aPage,
    transactions: []
};

($.each loop) {
    formData.transactions.push({
        "code": code,
        "agency_number": agency_number,
        "agency_code": agency_code
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...