Por ejemplo, tengo una función .ajax() como la siguiente:

function trend() {
    return $.ajax({
        url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" + $(".numberOfProfile0").html(), //getting the api
        type: 'get',
        success: function(data) {

        }
    });
}

Funciona bien, pero me gustaría agregar una instrucción if para detectar si existen $(".numberOfProfile0").html() o no, y solo se ejecutará cuando exista $(".numberOfProfile0").html()

Intenté a continuación pero no parece correcta

if ($(".numberOfProfile0").length) {
    function trend() {
        return $.ajax({
            url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" + $(".numberOfProfile0").html(), //getting the api
            type: 'get',
            success: function(data) {

            }
        });
    }
}

- ACTUALIZACIÓN:

Vamos a mostrar la aplicación completa. Esta es la función:

  if($(".numberOfProfile0").html().length){
                    function trend1() {
                          return $.ajax({
                            url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" + $(".numberOfProfile0").html(), //getting the api
                            type: 'get',
                            success: function(data) {

                            }
                          });
                        }
                    }

$.when(trend1()).done(function(trend1_data) {

                        //do something
}
2
Anson Aştepta 10 may. 2016 a las 07:55

6 respuestas

La mejor respuesta

Recuerde que el selector jQuery no es una cadena . Usando jQuery, la forma correcta de hacer esto es algo como $('.selector').val().length , $('.selector').html().length Use $(".numberOfProfile0").html().length > 0 en su código:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="numberOfProfile0">lorem</div>

<script>
if ( $(".numberOfProfile0").html().length > 0 ) {
  
   alert("success");
  
 // your function:
  
   //function trend() {
        //return $.ajax({
           // url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" + //$(".numberOfProfile0").html(), //getting the api
           // type: 'get',
            //success: function(data) {

            //}
       // });
   // }
  
  }


</script>
1
Arun Sharma 10 may. 2016 a las 05:44

Creo que debería ser

function trend() {
    if ( $(".numberOfProfile0").length ) {
        return $.ajax({
            url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" + $(".numberOfProfile0").html(), //getting the api
            type: 'get',
            success: function(data) {

            }
        });
    }//if()
    else
    {
      return false; //or any other appropriate value
    }
}//trend()
1
Mohit Bhardwaj 10 may. 2016 a las 05:02

Puede usar .is() dentro de $.when() en el ternario para devolver trend() si el elemento existe, de lo contrario devolver null a $.when(); manejar elemento que no existe en DOM. Tenga en cuenta que puede eliminar la opción success en $.ajax() si la respuesta se maneja en .done()

function trend() {
  return $.ajax({
    url: "/dashboard/getTrend'"
         + "?period=30d" 
         + "&profileId=" 
         + $(".numberOfProfile0").html(), //getting the api
    type: "get"
  });
}

$.when($(".numberOfProfile0").is("*") ? trend() : null)
.done(function(trend1_data) {
  if (trend1_data === null) {
    // handle `$(".numberOfProfile0")` not existing in `DOM`
  } else {
    // handle `trend1_data` not being `null`, element exists
    // do something
  }
})
1
guest271314 10 may. 2016 a las 05:15

¡Lo estas haciendo mal! Está definiendo la función dentro de if, donde como debería llamarla dentro de if.

Primero defina la función.

function trend() {
    return $.ajax({
        url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" + $(".numberOfProfile0").html(), //getting the api
        type: 'get',
        success: function(data) {

        }
    });
}

Entonces llámalo.

if ($(".numberOfProfile0").length) {
    trend();   
}

O

Puede poner el control if dentro de la función.

function trend() {
        if ($(".numberOfProfile0").length) {
             return $.ajax({
                 url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" + $(".numberOfProfile0").html(), //getting the api
                 type: 'get',
                 success: function(data) {

                 }
             });
       }
       else{
            return -1;
       }
    }
1
Teja 10 may. 2016 a las 05:08

Debe verificar la existencia del elemento dentro de la before_send devolución de llamada para aJax y cancelar la solicitud de aJax si no.

function trend() {
        return $.ajax({
            url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" +        $(".numberOfProfile0").html(), 
            type: 'get',
            before_send: : function( xhr ) {
              if ($(".numberOfProfile0").length > 0  && $(".numberOfProfile0").html().trim() == ''){
                return false;
              }
            }
            success: function(data) {

            }
        });
    }

El fragmento de código anterior debería funcionar en su caso.

-1
Meer 10 may. 2016 a las 06:02

Use ($(".numberOfProfile0").html() !== '') que significa que si el elemento con la clase .numberOfProfile0 no está vacío

function trend() {
   if ($(".numberOfProfile0").html().trim() !== '') { 
     $.ajax({
        url: '/dashboard/getTrend' + '?period=30d' + "&profileId=" + $(".numberOfProfile0").html(), //getting the api
        type: 'get',
        success: function(data) {

        }
     });
   }
}
1
Mohamed-Yousef 10 may. 2016 a las 05:05