es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema con el mensaje de éxito en JQuery desde el controlador de Laravel.

He enviado la respuesta JSON desde el controlador de Laravel, pero cuando se produce un error, la sección de JQuery funciona bien, pero cuando la solicitud tiene éxito, JQuery muestra el error de error de análisis y no puedo leer el contenido de los datos, aunque se muestra correctamente en la consola de registro.

Código de JQuery Ajax:

event.preventDefault();
url = $('a#sendpropertiesdata').attr('href');
data = new FormData($('#propertiescreateform')[0]);

$.ajax({
    url: url,
    type: "POST",
    data: data,
    processData: false,
    dataType: 'json',
    contentType: false,
    beforeSend: function () {},
    success: function (data) {
        response = data
        alert(response['code']);
        if (data.code == 0) {
            $('span#error<em>message').text(data.error).css('color', 'red');
        } else if (data.code == 1) {
            $('span#error</em>message').text(data.msg).css('color', 'green');
            window.setTimeout(function () {
                $('form#propertiescreateform').remove();
            }, 3000);
        }
    },
    complete: function (data, status) {
        alert(data.code + "     " + status);
        if (data.code == 1) {
            $('span#error_message').text(data.msg).css('color', 'green');
            window.setTimeout(function () {
                $('form#propertiescreateform').remove();
            }, 3000);
        }
    }
});

Código del controlador:

$validator = \Validator::make($request->all(), $rules); 
if ($validator->passes())
{
    $property = new Properties();
    $property->country = $request->country ; 
    $property->city = $request->housecity ; 
    $property->location = $request->houseaddress ;
    $property->description = $request->propertiesdescription ;
    $property->price = $request->price;
    $property->save();   

    return response()->json(['code' => 1, 'msg' => 'data saved successfully']);
}
else
{
    return response()->json(['code' => 0, 'error' => $validator->errors()->all()]);
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en la respuesta JSON que se devuelve desde el controlador de Laravel. Cuando la respuesta tiene un error, la sección de jQuery puede leer correctamente la respuesta, pero cuando la solicitud tiene éxito, la sección de jQuery muestra un error de análisis y no puede leer el contenido de los datos de respuesta.

    Al examinar el código de jQuery, parece que el problema podría estar en el parámetro dataType establecido en json. Cuando una solicitud tiene éxito, jQuery analiza automáticamente la respuesta como JSON. Si la respuesta no es un JSON válido, puede producirse un error de análisis.

    Para solucionarlo, intenta eliminar el parámetro dataType o configurarlo en text para recibir la respuesta como un texto sin formato. Luego, analiza manualmente los datos de respuesta como JSON utilizando el método JSON.parse().

    Código de jQuery actualizado:

    event.preventDefault();
    url = $('a#sendpropertiesdata').attr('href');
    data = new FormData($('#propertiescreateform')[0]);
    
    $.ajax({
        url: url,
        type: "POST",
        data: data,
        processData: false,
        contentType: false,
        beforeSend: function () {},
        success: function (data) {
            // alert(data.msg);
            response = JSON.parse(data);
            alert(response['code']);
            if (response.code == 0) {
                $('span#error_message').text(response.error).css('color', 'red');
            } else if (response.code == 1) {
                $('span#error_message').text(response.msg).css('color', 'green');
                window.setTimeout(function () {
                    $('form#propertiescreateform').remove();
                }, 3000);
            }
    
        },
        complete: function (data, status) {
            response = JSON.parse(data.responseText);
            alert(response.code + "     " + status);
            if (response.code == 1) {
                $('span#error_message').text(response.msg).css('color', 'green');
                window.setTimeout(function () {
                    $('form#propertiescreateform').remove();
                }, 3000);
            }
        }
    });
    

    En el código del controlador, no parece haber un problema con la respuesta JSON que se devuelve.

Comments are closed.