Возвращение строкового JSON в PHP - PullRequest
0 голосов
/ 20 июня 2019

Я использую скрипт JQuery для манипулирования изображением. Пока что все функции работают так, как задумано, за исключением возврата данных в PHP. Я пробовал несколько примеров, которые я нашел в Stackoverflow, но я не смог вернуть данные без ошибок.

Примечание: JavaScript не является моим основным языком, мои предыдущие попытки использования Ajax не увенчались успехом.

    $.ajax({
        type: "POST",
        url: "/foo/bar.php",
        datatype: "json",
        data: { 
            submit: JSON.stringify(format(), null, 2) 
        },
        cache: false,
        success: function() {
            console.log("Order Submitted");
        }
    });

Это ошибка, которая генерируется:

designer.js: 276 Uncaught TypeError: Невозможно прочитать свойство 'slice' из неопределенного
в формате (designer.js: 276)
at designer.js: 340

Slice - это функция внутри Format. В конце функции Format она возвращает переменную out. Я попытался заменить данные на data: { test: out }, но это также оказалось неудачным.

В PHP я называю результат следующим образом; $stringData = $_POST['submit']; Что возвращает следующее: Array ( [submit] => Submit )

Когда console.log (out) вызывается без установленного кода ajax, он возвращает значения правильно. Как только код Ajax добавлен, части скрипта перестают работать как задумано.

function format() {
var all = rects.slice().sort(function(d, f){ return d[0] - f[0]});
var lst = null;
var out = [];

for (var i = 0; i < all.length; i++) {
        var cur = all[i];
        var pen = cur[0];

        if (lst != pen) {
                var locs = [];

                out.push(locs);
                lst = pen;
            }
            var ecl = cur[1].pos;
            var pos =
            {
                pos: [
                    round(ecl[0] / size.x),
                    round(ecl[1] / size.y),
                    round(ecl[2] / size.x),
                    round(ecl[3] / size.y)
                    ]
            };

        if(typeof cur[1].colour !== 'undefined'){
                pos.colour = cur[1].colour;
            }

        if(typeof cur[1].filter !== 'undefined'){
                pos.filter = cur[1].filter;
            }
    locs.push(pos);
}
console.log(JSON.stringify(out, null, 2));
return out;

}

1 Ответ

0 голосов
/ 20 июня 2019

Как правило, ошибка Cannot read property 'slice' of undefined подразумевает, что вы вызываете .slice() для чего-то, что не существует.

Первая строка вашей функции format действительно создает rects.slice() - однако выне показывать, откуда взята эта переменная rects (кажется, она глобальная).

Учитывая, что это единственный вызов slice в показанном вами коде, вероятно, происходит то, что глобальная переменнаяrects действительно не определено.

Добавление console.log(rects) в качестве первой строки функции format поможет вам отладить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...