Я не могу получить ответ массива json - PullRequest
1 голос
/ 08 марта 2020

Я пытаюсь отправить с PHP и jQuery ответ массива, но он не работает, мой код PHP:

public function get(Request $request)
{
    $pre_images = Pre_Image::all();

    foreach ($pre_images as $pre_image) {
        $data[] = array("file" => $pre_image->image);
    }

    echo json_encode($data);
}

Он создает массив, и я кодирую его в быть отправлено. Тогда мой jQuery такой:

$( 'body' ).on( "click", '#add_value', function() {
    $.ajax({
        type: 'POST',
        url: '/pre_image/get',
        success:function(files)
        {
            var len = files.length;

            var values = '';

            for(var i=0; i<len; i++){
                values = values + '<div class="col-md-3">'+ files[i].file +'<div class="col-md-3">';
            }

            $(".values").append('<div class="row" style="padding-left:20px; padding-right:20px;"><div class="col-md-3"><div class="form-group"><br><label class="control-label mb-10">Nombre de las Opciones (Ejem: Rojo, Azul.)</label><input type="text" class="form-control" name="value_name"></div></div><div class="col-md-3"><div class="form-group"><br><label class="control-label mb-10">Opciones (Ejem: 38, 39, 40.)</label><input type="text" class="form-control" name="value_name"></div></div><div class="col-md-6"><div class="form-group"><br><label class="control-label mb-10">Imagenes </label>'+values+'</div></div></div>');
        }
    });

    return false;
});

Я получаю ответ в случае успеха, но первая проблема, которую я получаю, это когда я использую files.length; он насчитывает 37, и он должен считаться 1, потому что в данный момент в базе данных есть только одна запись, но это подсчет длины слова, которое я имею в виду 272621621287272.jpg это подсчет длины слова. проблема, которую я получаю, это то, что я использую для чтения массива, и он возвращает меня неопределенным. Как это возможно, если в массиве хранится запись, полученная из ответа PHP.

Надеюсь, вы мне поможете. Спасибо. jquery

1 Ответ

0 голосов
/ 08 марта 2020

Потому что jquery не анализирует json в объекте.

Есть несколько способов сказать, что вы ожидаете json ответа на jquery.

Во-первых, вы должны сказать, что ожидаете ответа json с dataType

$.ajax({
    type: 'POST',
    url: '/pre_image/get',
    dataType: 'json' ,
    success:function(files)
    // and so on

Или другой способ - добавить Content-Type = application / json в заголовок ответа. , Таким образом jquery будет угадывать ваш тип данных.

в laravel вы можете сделать это, используя json метод класса ответа вместо кодирования ваших данных вручную.

public function get(Request $request)
{
    $pre_images = Pre_Image::all();

    foreach ($pre_images as $pre_image) {
        $data[] = array("file" => $pre_image->image);
    }

    return response()->json($data);
}

Или вы можете вручную проанализировать ваш json ответ, используя JSON библиотека. Я не рекомендую этот путь. Ajax может анализировать json ответ, если вы не скажете ему, что ожидаете ответа. Не нужно разбирать вручную

success(json) {
    var files = JSON.parse(json);
    var values = '';
    files.forEach(function(file){
        values += <div class="col-md-3">'+ file +'<div class="col-md-3">
    })

    $(".values").append('<div class="row" style="padding-left:20px; padding-right:20px;"><div class="col-md-3"><div class="form-group"><br><label class="control-label mb-10">Nombre de las Opciones (Ejem: Rojo, Azul.)</label><input type="text" class="form-control" name="value_name"></div></div><div class="col-md-3"><div class="form-group"><br><label class="control-label mb-10">Opciones (Ejem: 38, 39, 40.)</label><input type="text" class="form-control" name="value_name"></div></div><div class="col-md-6"><div class="form-group"><br><label class="control-label mb-10">Imagenes </label>'+values+'</div></div></div>');

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...