Aquí, tengo una función que debe ser llamada antes de cualquier llamada de AJAX presente en el .Proyecto de RED.

Actualmente, tengo que llamar checkConnection en cada clic de botón que se va a invocar el método AJAX, si la conexión de red es allí, los ingresos reales de la AJAX llamada!

De todos modos, quiero evitar de esta manera y la checkConnection función debe ser llamada automáticamente antes de cualquier llamada de AJAX en el formulario.

En resumen, quiero hacer la función de comportarse como un event que será activada antes de cualquier llamada de AJAX

De añadir la muestra, que hace la llamada AJAX en el botón de clic; por supuesto, después de comprobar la disponibilidad de internet…

//check internet availability
function checkConnection() {
    //stuff here to check internet then, set return value in the variable
    return Retval;
}

//Ajax call
function SaveData() {
        var YearData = {
            "holiday_date": D.getElementById('txtYears').value
        };
        $.ajax({
            type: "POST",
            url: 'Service1.svc/SaveYears',
            data: JSON.stringify(YearData),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            processData: true,
            success: function (data, status, jqXHR) {
                //fill page data from DB
            },
            error: function (xhr) {
                alert(xhr.responseText);
            }
        });
    }

Y a continuación es la actual forma de llamar a la función:

<form onsubmit="return Save();">
    <input type="text" id="txtYears" /><br />
    <input type="submit" id="btnSave" onclick="return checkConnection();" value="Save" />
    <script>
        function Save() {
            if (confirm('Are you sure?')) {
                SaveData();
            }
            else {
                return false;
            }
        }
    </script>
</form>
InformationsquelleAutor Vikrant | 2015-04-07

4 Comentarios

  1. 6

    Usted no puede implícitamente una llamada a una función sin escribir realmente una llamada ni una sola vez(!) en JavaScript.

    Por lo tanto, mejor llamada en real AJAX y para que se puede usar beforeSend propiedad de ajaxRequest como los siguientes, por tanto, no habrá ninguna necesidad de llamar checkConnection() por separado:

    $.ajax({
                type: "POST",
                url: 'Service1.svc/SaveYears',
                data: JSON.stringify(YearData),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                processData: true,
                beforeSend: function() {
                   if(!checkConnection())
                       return false;
                },
                success: function (data, status, jqXHR) {
                    //fill page data from DB
                },
                error: function (xhr) {
                    alert(xhr.responseText);
                }
            });

    Se reduce a la llamada que han hecho onsubmit() de form etiqueta!

    ACTUALIZACIÓN:
    para registrar una función global antes de cada petición AJAX uso:

    $(document).ajaxSend(function() {
      if(!checkConnection())
         return false;
    });
    • si es considerado como de trabajo,todavía necesita ser llamado en cada AJAX
    • pero si la conexión se devuelve false , petición ajax no se llama @Vikrant
    • Sí, lo es, pero plz leer mi pregunta es acerca de la ejecución de una función sin tener que escribir una llamada a la función si en otra función O en el AJAX!
    • Puede usted comprobar mi actualización .. .ajaxSend registrará a través de todas las peticiones AJAX para no tener que escribir en cada petición AJAX.. @Vikrant
    • ¿Qué pasa si checkConnection() ya contienen llamada ajax? ¿Cómo podemos definir excepto en allí?
    • está bien para hacer otra llamada ajax en lugar de la checkConnection función? será el principal llamada ajax ejecutar después de la secundaria aquí? $.ajax({ // primaria llamada ajax… beforeSend: function() { // secundaria llamada ajax aquí….. } });
    • Debería funcionar pero no lo intenté.

  2. 2

    La mejor manera es usar una publicación-suscribirse patrón de añadir ningún funciones extra que se llama en pre-determinado de veces (ya sea antes o después de ajax por ejemplo).

    jQuery ya admite la costumbre de publicar-subsrcibe

    Para este ejemplo que acabo de hacer esto:

    //Ajax call
    function SaveData(element) {
           var doAjax = true; 
           var YearData = {
                "holiday_date": D.getElementById('txtYears').value
            };
            if (element === myForm) 
            {
               doAjax = checkConnection();
            }
            if ( doAjax )
            {
            $.ajax({
                type: "POST",
                url: 'Service1.svc/SaveYears',
                data: JSON.stringify(YearData),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                processData: true,
                success: function (data, status, jqXHR) {
                    //fill page data from DB
                },
                error: function (xhr) {
                    alert(xhr.responseText);
                }
            });
            }
            else
            {
              //display a message
            }
        }

    Esperanza he entendido bien lo que quieres decir.

    ACTUALIZACIÓN:

    en el if usted puede hacer una comprobación adicional si se llama a la función desde el formulario o un campo (por ejemplo, agregar un argumento SaveData(elemento))

    Si utiliza el saveData en html, hacer esto: "saveData(this)", tal vez usted debe publicar el código html así

    • Doy la bienvenida a tu sugerencia, pero no hace mucha diferencia que mi método.. if es en AJAx en lugar de la función! lo que si hay varias llamadas AJAx, va a estar llamando en cada AJAX?
    • ok, pero sugiero cambiar el título de tu pregunta, ya que tiene mucho sentido
    • en el if usted puede hacer una comprobación adicional si se llama a la función desde el formulario o un campo (por ejemplo, agregar un argumento SaveData(element))
    • html ya está ahí en cuestión y lo que están diciendo es que ya haya sido respondida por @BrijeshBhatt
    • yeap lo siento, uso "Save(this)" así que si el elemento está establecido, y es la forma de saber donde se llama a la función de
  3. 1

    Puede utilizar:

    $(document)
    .ajaxStart(function () {
      alert("ajax start");
    })
    .ajaxComplete(function () {
         alert("ajax complete");
    })

    Que es!!

    • Gracias, pero tu post habla acerca de la función entre la llamada ajax; pero yo necesitaba la manera de ejecutar una función antes de la llamada AJAX
    • No @Vikrant, este código no es una parte de la llamada AJAX. Es separar el código de llamada de AJAX. Y añadir su función .ajaxStart función. Esa función se llame antes de cualquier llamada de AJAX en su aplicación.
    • ok, @TellMeHow va a tratar sobre esta
    • Vea este ejemplo :jsfiddle.net/6khocrp0 y le dan a uno como si el trabajo!!!
    • por cierto, no es como, es un upvote 😉

Dejar respuesta

Please enter your comment!
Please enter your name here