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.

“El lado del servidor espera la finalización de Ajax – ASP Webform”

Después de la presentación del formulario en la página ASP, llamo a esta función para realizar algunas tareas en segundo plano.

El servicio es algo así:

Quiero que lo anterior se haga en segundo plano y necesito almacenarlo en sesión porque no podemos usar una base de datos persistente. El problema es que después de enviar para Type1, el servicio es golpeado y comenzará el procesamiento. Esto ahora bloqueará la IU y el usuario puede hacer cambios. Pero si el usuario cambia de Type1 a Type2 (misma IU solo valores diferentes para el formulario), se requiere un golpe en el lado del servidor que espera a que se complete el ajax. ¿Puedo hacer que la llamada ajax sea independiente de cualquier llamada del lado del servidor? Soy un poco nuevo en el renderizado del lado del servidor, así que cualquier ayuda sería genial.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para hacer llamadas ajax independientes de las llamadas del lado del servidor

    Para hacer la llamada ajax independiente de cualquier llamada del lado del servidor, puedes usar el siguiente enfoque:

    1. Cambia la página ASP para que solo devuelva una respuesta al usuario al enviar un formulario. Esta respuesta no debe depender del procesamiento realizado en la llamada ajax.
    2. Realiza la llamada ajax al servicio, pero no esperes la respuesta. En su lugar, puedes seguir con otras tareas una vez que la llamada ajax se haya iniciado.

    3. Almacena los datos necesarios en la memoria del lado del cliente, en lugar de de la sesión del lado del servidor. Puedes usar localStorage o sessionStorage para este propósito.

    4. Cuando el usuario pasa del Type1 a Type2, verifica si los datos necesarios están presentes en la memoria del lado del cliente. Si es así, úsalos directamente. Si no, realiza la llamada ajax nuevamente para buscar los datos y almacenarlos en la memoria del lado del cliente.

    Aquí está el código modificado para lograr este enfoque:

    // Envía la solicitud ajax al enviar el formulario
    $.ajax({
        url: "SomeService.asmx/LoadData",
        method: "POST",
        data: JSON.stringify({ requestDto: { Type: "Type1" } }),
        contentType: 'application/json;',
        dataType: 'json',
        error: function () {
            alert("Error");
        },
        success: function (result) {
            if (result.Status) {
                // Almacena los datos necesarios en sessionStorage
                sessionStorage.setItem("Type1_Data", JSON.stringify(result.Data));
            } else {
                alert(result.Message);
            }
        }
    });
    
    // Al pasar a Type2, verifica si los datos necesarios están disponibles en sessionStorage
    var data = sessionStorage.getItem("Type2_Data");
    if (data) {
        // Usa los datos almacenados directamente
        processData(JSON.parse(data));
    } else {
        // Busca los datos usando la llamada ajax y almacénalos en sessionStorage
        $.ajax({
            url: "SomeService.asmx/LoadData",
            method: "POST",
            data: JSON.stringify({ requestDto: { Type: "Type2" } }),
            contentType: 'application/json;',
            dataType: 'json',
            error: function () {
                alert("Error");
            },
            success: function (result) {
                if (result.Status) {
                    // Almacena los datos necesarios en sessionStorage
                    sessionStorage.setItem("Type2_Data", JSON.stringify(result.Data));
                    processData(result.Data);
                } else {
                    alert(result.Message);
                }
            }
        });
    }
    
    // Método auxiliar para procesar los datos obtenidos
    function processData(data) {
        // Procesa los datos y actualiza la interfaz de usuario
    }
    

    En este enfoque, no estás bloqueando la interfaz de usuario mientras la llamada ajax se está procesando. En su lugar, estás almacenando los datos necesarios en la memoria del lado del cliente y los estás buscando cuando son necesarios. De esta manera, el usuario puede moverse entre diferentes tipos sin ningún tiempo de espera.

Comments are closed.