#php #jquery #ajax #laravel-5.2
#php #jquery #ajax #laravel-5
Вопрос:
Я отправляю два массива данных на контроллер laravel. Перед отправкой длина массивов составляет около 220 каждый. Затем для теста я снова возвращаю ответ в формате json обратно в jquery с длиной массивов, и первый из них в порядке — 220, а второй массив имеет длину ~ 114.
Как я могу это решить?
Jquery ajax:
console.log('Array first before ' arr.length);
console.log('Array second before ' arr_planned.length);
$.ajax({
method:'POST',
url:url,
data: {
_token:token,
arr:arr,
arr_planned:arr_planned
}
}).done(function(msg) {
console.log(msg);
});
Контроллер
$array_normal = $request['arr'];
$array_planned = $request['arr_planned'];
return response()->json(['Array first after' => sizeof($array_normal),'Array second after' => sizeof($array_planned)],200);
Редактировать
Прямо сейчас я вижу, что длина массива ограничена 334 (на основе другого теста массива).
Комментарии:
1.
return response()->json(['Array first after' => count($array_normal),'Array second after' =>count($array_planned)]);
проверьте один раз2. Это точно такой же ответ.
Ответ №1:
Очень вероятно, что проблема в том, сколько переменных принимается в запросах в вашей конфигурации php.ini. Вы должны раскомментировать ;max_input_vars = 100
что-то вроде max_input_vars = 100000
.
Надеюсь, это поможет.
Ответ №2:
Вероятно, вы превышаете ограничения PHP для максимального размера записи или входных переменных. Создайте / отредактируйте файл php.ini в корне вашего веб-сайта и добавьте
memory_limit = 256M
post_max_size = 150M
max_input_vars = 10000
Вы можете проверить, были ли введены ограничения, добавив ['memory_limit' => ini_get('memory_limit'), 'post_max_size' => ini_get('post_max_size'), 'max_input_vars' => ini_get('max_input_vars')]
их к своему ответу.
Это также может быть проблемой с тем, как PHP обрабатывает такой объем данных. Это может быть усечение его до достижения каких-либо определенных пределов. Вы можете сравнить $_POST
с php://input
, который является необработанными строковыми данными. Вы можете использовать функцию, подобную этой:
function getRealPOST() {
$pairs = explode("amp;", file_get_contents("php://input"));
$vars = array();
foreach ($pairs as $pair) {
$nv = explode("=", $pair);
$name = urldecode($nv[0]);
$value = urldecode($nv[1]);
$vars[$name] = $value;
}
return $vars;
}
var_dump($_POST, getRealPOST());
Если они разные, то у PHP просто где-то возникают трудности при заполнении $_POST
, и вы можете использовать эту getRealPOST
функцию в качестве обходного пути.
Комментарии:
1. Спасибо! Проблема была только в max_input_vars.
2. Рад, что вы разобрались.