¿Cómo usar ajaxStart si el método $ .ajax está definido en una clase?

Creé el método ajax en una clase en mi archivo js. A continuación se adjunta para la referencia

var ajaxcall =
{
    SitePath: '',
    data: '',
    url: '',
    callbackfunction: '',
    fileElementId: '',
    AjaxRequest: false,
    callback: true,
    async: false,
    folder: '',
    filename: '',
    Call: function () {
        if (ajaxcall.AjaxRequest == true) {
            alert(ajaxcall.AjaxRequest);
            return;
        }
        else {
            try {
                ajaxcall.AjaxRequest == true;
                alert('b');
                $.ajax({
                    type: "POST",
                    url: ajaxcall.url,
                    data: ajaxcall.data,
                    contentType: "application/json; Characterset=utf-8",
                    dataType: "json",
                    async: false,
                    success: function (data) {
                        if (ajaxcall.callback == true) {
                            ajaxcall.callbackfunction(data);
                        }
                    },
                    error: function (request, status, error) {
                        //alert("Exception Handling :  \n" + request.responseText);
                        alert('Unable to process the request at this moment! Please try again later.');
                    },
                    complete: function () {
                        ajaxcall.AjaxRequest = false;
                    }
                });
            }
            catch (e) {
                ajaxcall.AjaxRequest == false;
                // alert("Error Catch : " + e.Description + '\n' + 'Message: ' + e.Message);
            }
        }
    },
    AjaxFileUpload: function () {
        $.ajaxFileUpload({
            type: "POST",
            url: "../GenericHandlers/FileUploader.ashx?path=" + ajaxcall.folder,
            dataType: 'json',
            async: false,
            secureuri: false,
            fileElementClass: ajaxcall.fileElementClass,
            success: function (data) {
                var data = data.toString();
                ajaxcall.filename = data.substring(6, data.length - 7);
                alert(ajaxcall.filename);
                return true;
            }
        });
    }
};

Ahora quiero mostrar un div cuando comienza la llamada ajax y ocultarlo después de finalizar. Así que para eso he usado

$(document).ready(function(
    $('#Loading').ajaxStart(function () {
         alert('a');
         $('#Loading').show();
    }).ajaxStop(function () {
         $('#Loading').hide();
    });
});

Pero cuando llamo al método ajax (definido arriba en la clase), el control entra primero en el método ajax y luego en ajaxStart.

No sé por qué está sucediendo. Por favor ayuda.

preguntado el 01 de junio de 12 a las 12:06

2 Respuestas

Use el global recomendado para estos:

$.ajaxStart(function() {
    $("#Loading").show();
});
$.ajaxComplete(function() {
    $("#Loading").hide();
});

Pruébelo de esta manera adjunto a su elemento de identificación de carga:

$("#Loading").ajaxStart(function() {
    $(this).show();
});
$("#Loading").ajaxComplete(function() {
    $(this).hide();
});

Respondido el 01 de junio de 12 a las 15:06

No funciona y da "Error de tiempo de ejecución de Microsoft JScript: el objeto no admite la propiedad o el método 'ajaxStart'" en IE. estoy usando jquery-1.7.2.js - Jitendra Pancholí

Agregué un ejemplo adjuntándolo a su elemento por id. - Marcos Schultheiss

AjaxStart llama cuando comienza la solicitud http, no cuando se ejecuta el método ajax.

Respondido el 01 de junio de 12 a las 12:06

Ok, por favor ayúdame a corregir el código. Cómo mostrar un div de carga antes de enviar cualquier solicitud ajax y ocultarlo después de completarlo. - Jitendra Pancholí

Hola, $("#Loading").bind("ajaxStart", function () { $("#Loading").show(); }).bind("ajaxComplete", function () { $("#Loading ").esconder(); }); este código no funciona para mí. - Jitendra Pancholí

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.