Не могу понять особенностей POST запроса в fetch

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
412
Реакции
48
Пытаюсь отправить POST запрос через fetch. Ранее для этих целей использовал jquery $.ajax
Вот мой код:

Код:
                        fetch("/", {
                            method: 'POST',
                            headers: {
                                "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
                            },
                            body: 'mode=ajax&action=delete_opt&opt=' + this.arr_opt_to_delete

                        })
                            .then(response => response.json())
                            .then(data => {
                                console.log(data);
                            })

В принимающем коде, в PHP скрпте, делаю вывод в файл:

Код:
file_put_contents("/home/web/ing.txt", print_r($_POST, true), FILE_APPEND);

И получаю результат:
Код:
    Array
    (
        [mode] => ajax
        [action] => delete_opt
        [opt] => ite,koni,vio
    )
Ранее я использовал jquery $.ajax и получал как и положено массив. Добавил код:
Код:
                            $.ajax("/", {
                                cache: false,
                                data: {
                                    "mode": "ajax",
                                    "action": "delete_opt",
                                    "opt": this.arr_opt_to_delete
                                },
                                dataType: "json",
                                type: "POST",
                                success: function(dt){

                                    console.log(dt);

                                },
                                error: function(){
                                    alert("err55");
                                }
                            });
И ожидаемо получил:
Код:
    Array
    (
        [mode] => ajax
        [action] => delete_opt
        [opt] => Array
            (
                [0] => ite
                [1] => koni
                [2] => vio
            )
   
    )
Почему через jquery $.ajax данные [opt] приходят как и положено массивом, а через fetch я получаю строку ite,koni,vio ?? Как добиться, чтобы [opt] приходили массивом через fetch ?
 

Sorcus

Sorcus. A New Beginning.
Регистрация
10 Июл 2011
Сообщения
513
Реакции
884
Пытаюсь отправить POST запрос через fetch. Ранее для этих целей использовал jquery $.ajax
Вот мой код:

Код:
                        fetch("/", {
                            method: 'POST',
                            headers: {
                                "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
                            },
                            body: 'mode=ajax&action=delete_opt&opt=' + this.arr_opt_to_delete

                        })
                            .then(response => response.json())
                            .then(data => {
                                console.log(data);
                            })

В принимающем коде, в PHP скрпте, делаю вывод в файл:

Код:
file_put_contents("/home/web/ing.txt", print_r($_POST, true), FILE_APPEND);

И получаю результат:
Код:
    Array
    (
        [mode] => ajax
        [action] => delete_opt
        [opt] => ite,koni,vio
    )
Ранее я использовал jquery $.ajax и получал как и положено массив. Добавил код:
Код:
                            $.ajax("/", {
                                cache: false,
                                data: {
                                    "mode": "ajax",
                                    "action": "delete_opt",
                                    "opt": this.arr_opt_to_delete
                                },
                                dataType: "json",
                                type: "POST",
                                success: function(dt){

                                    console.log(dt);

                                },
                                error: function(){
                                    alert("err55");
                                }
                            });
И ожидаемо получил:
Код:
    Array
    (
        [mode] => ajax
        [action] => delete_opt
        [opt] => Array
            (
                [0] => ite
                [1] => koni
                [2] => vio
            )

    )
Почему через jquery $.ajax данные [opt] приходят как и положено массивом, а через fetch я получаю строку ite,koni,vio ?? Как добиться, чтобы [opt] приходили массивом через fetch ?
Потому что во втором случае ты формируешь json строку.
Вот так должно заработать:
Код:
fetch("/", {
  method: 'POST',
  headers: {
    "Content-type": "application/json"
  },
  body: JSON.stringify({
    "mode": "ajax",
    "action": "delete_opt",
    "opt": this.arr_opt_to_delete
  })
})
.then(response => response.json())
.then(data => {
    console.log(data)
})
 

garphild

Постоялец
Регистрация
19 Май 2009
Сообщения
60
Реакции
31
Пытаюсь отправить POST запрос через fetch. Ранее для этих целей использовал jquery $.ajax
Вот мой код:

Код:
                        fetch("/", {
                            method: 'POST',
                            headers: {
                                "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
                            },
                            body: 'mode=ajax&action=delete_opt&opt=' + this.arr_opt_to_delete

                        })
                            .then(response => response.json())
                            .then(data => {
                                console.log(data);
                            })

В принимающем коде, в PHP скрпте, делаю вывод в файл:

Код:
file_put_contents("/home/web/ing.txt", print_r($_POST, true), FILE_APPEND);

И получаю результат:
Код:
    Array
    (
        [mode] => ajax
        [action] => delete_opt
        [opt] => ite,koni,vio
    )
Ранее я использовал jquery $.ajax и получал как и положено массив. Добавил код:
Код:
                            $.ajax("/", {
                                cache: false,
                                data: {
                                    "mode": "ajax",
                                    "action": "delete_opt",
                                    "opt": this.arr_opt_to_delete
                                },
                                dataType: "json",
                                type: "POST",
                                success: function(dt){

                                    console.log(dt);

                                },
                                error: function(){
                                    alert("err55");
                                }
                            });
И ожидаемо получил:
Код:
    Array
    (
        [mode] => ajax
        [action] => delete_opt
        [opt] => Array
            (
                [0] => ite
                [1] => koni
                [2] => vio
            )
  
    )
Почему через jquery $.ajax данные [opt] приходят как и положено массивом, а через fetch я получаю строку ite,koni,vio ?? Как добиться, чтобы [opt] приходили массивом через fetch ?

body: 'mode=ajax&action=delete_opt&opt=' + this.arr_opt_to_delete

Заменить на

body: 'mode=ajax&action=delete_opt&opt=' + this.arr_opt_to_delete.join('&opt=')

Суть в формате отправки POST. Там массивы должны быть массивами, а не сложением строк.

Вариант @Sorcus хорош, но придется несколько переделать php часть.
 
Сверху