Сообщение Json String получить NULL

Я преобразовал все записи формы в объект, а затем заполнил его, используя объект для заполнения массива:

var jsonObj = [];
var formData = new FormData();
$('[name = "'+form+'"] *').not(':input[type=file], :input[type=button], :input[type=submit], :input[type=reset], [name = "input_search"]').filter(':input').each(function(obj, v) {
    var iObj        = {}
    var input       = $(this);
    var inputname   = input.attr("name");
    var val         = input.val();
    var inputval    = val;
    iObj[inputname] = inputval;
    jsonObj.push(iObj);
});

Позже я пытаюсь преобразовать массив Final в строку Json следующим образом:

jsonData = JSON.stringify(jsonObj);

и я получаю эту строку:

[{"s-file[]":"Prueba 3"},{"text_file[]":"ORT0000133.pdf"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]

Я отправляю это на PHP-сервер С помощью этого, потому что я отправляю файл другого типа элемента с помощью метода formData.append:

formData.append('jsonData', jsonData);
var url = 'index.php';
$.ajax({
    url: url,
    data: formdata,
    contentType: false,
    processData: false,
    type: 'POST',
    cache: false,
    error: function(xhr, status, error) {
        alert(error);
    },
    success: function(response) {
        alert(response);
    }
});

На стороне сервера PHP я пытаюсь получить эту строку:

echo var_dump($_POST['jsonData']);

и я получаю эту строку:

string(169) "[{"s-file[]":"Prueba 3"},{"text_file[]":"ORT0000133.pdf"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]"

когда я пытаюсь преобразовать это в и массив с этим:

Тест 1:

echo '<pre>';
echo var_dump($_POST);
echo '</pre>';

вывод:

array(1) {
  ["jsonData"]=>
  string(169) "[{"s-file[]":"Prueba 3"},{"text_file[]":"ORT0000133.pdf"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]"
}

Тест 2:

echo '<pre>';
$jsonData=$_POST['jsonData'];
$Data=json_decode($jsonData);
echo var_dump($Data);
echo '</pre>';

вывод: я получаю NULL.

Я не понимаю что делаю не так

Последнее обновление:

я запускаю этот тест:

echo '<pre>';
$jsonData   = '|'.$_POST['jsonData'].'|';
$json       = '|'.'[{"s-file[]":"Prueba 3"},{"text_file[]":"casa.jpg"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]'.'|';
echo $Line = mb_strlen(mb_strcut($jsonData, 0, strspn($jsonData ^ $json, "\0")));
echo '<br>';
echo $jsonData[$Line];
echo '<br>';
echo $json[$Line];
echo '<br>';
echo '</pre>';

Выход

3
&
"

Я могу определить, что цепочка повреждена, но не могу знать, почему, как и как это исправить.

какие?? извините, очень сложно понять, 1-й, что вы хотите сделать, 2-й, в чем проблема.

Jeff 31.05.2018 01:06

@Jeff Обновил и исправил мой вопрос.

user9632001 31.05.2018 01:19

1. Посмотрите и / или опубликуйте JSON, чтобы мы тоже могли. 2. RTFM и php.net/manual/en/function.json-last-error-msg.php

Sammitch 31.05.2018 01:26

я добавил эту строку

user9632001 31.05.2018 01:26

WFM: 3v4l.org/4e6G4

Sammitch 31.05.2018 01:28

ммм, моя сторона PHP-сервера возвращает NULL :(

user9632001 31.05.2018 01:30

Измените var_dump($_POST['Data']) на var_dump($Data).

Barmar 31.05.2018 01:31

Я обновил его и получил кое-что ....

user9632001 31.05.2018 01:37

Что показывает echo json_last_error();?

Barmar 31.05.2018 01:38

я получаю это на эхо: 4

user9632001 31.05.2018 01:38

может случиться так, что это в строке нарушает ее: s-file[] конкретно: [] тогда как отправить данные о выбранных файлах в форме. я использую php 7.1

user9632001 31.05.2018 01:43

@Barmar последнее обновление

user9632001 31.05.2018 05:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
12
1 769
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Более простой способ отправить json:

$.ajax({
    url: url,
    data: jsonData, // stringified JSON
    contentType: 'application/json',
   // processData: false,
    type: 'POST',
    //cache: false, POST won't cache
    error: function(xhr, status, error) {
        alert(error);
    },
    success: function(response) {
        alert(response);
    }
});

И получить на php

$data = json_decode(file_get_contents('php://input')[,boolean to force array]);

Самый простой способ отправить данные в целом - использовать serialize() в форме и отправлять в качестве типа содержимого по умолчанию и получать различные поля как $_POST[inputName].

Ответ принят как подходящий

Проблема может быть связана с использованием:

$_GET  = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

https://stackoverflow.com/a/9854121/963200

нужно обойти это, чтобы решить и использовать после чтения данных из POST и GET

Другие вопросы по теме