Я преобразовал все записи формы в объект, а затем заполнил его, используя объект для заполнения массива:
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
&
"
Я могу определить, что цепочка повреждена, но не могу знать, почему, как и как это исправить.
@Jeff Обновил и исправил мой вопрос.
1. Посмотрите и / или опубликуйте JSON, чтобы мы тоже могли. 2. RTFM и php.net/manual/en/function.json-last-error-msg.php
я добавил эту строку
WFM: 3v4l.org/4e6G4
ммм, моя сторона PHP-сервера возвращает NULL :(
Измените var_dump($_POST['Data']) на var_dump($Data).
Я обновил его и получил кое-что ....
Что показывает echo json_last_error();?
я получаю это на эхо: 4
может случиться так, что это в строке нарушает ее: s-file[] конкретно: [] тогда как отправить данные о выбранных файлах в форме. я использую php 7.1
@Barmar последнее обновление



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Более простой способ отправить 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
какие?? извините, очень сложно понять, 1-й, что вы хотите сделать, 2-й, в чем проблема.