Jquery ajax вырезает массивы?

#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. Рад, что вы разобрались.