2014-04-16 17 views
6

Mam funkcję, która zwraca wyniki (lub nie). Problem polega na tym, że nie zwraca żadnej wartości, jaką dostaję w konsoli. Wiadomość jest prawdziwa i rozumiem problem. Ponadto ten błąd nie powoduje, że mój kod przestaje działać, ale chciałbym się dowiedzieć, czy jest jakaś możliwość uniknięcia tego?jquery Nie można odczytać właściwości "done" z undefined - unikaj tego

Funkcja w AJAX:

function getDelivery(){ 
    var items = new Array(); 

    $("#tab-delivery tr").each(function(){ 
     items.push({"id" : $(this).find('.form-control').attr('id'), "id_option" : $(this).find('.form-control').val()}); 
    }); 

    if(items.length > 0){ 
     return $.ajax({ 
      url: 'response.php?type=getDelivery', 
      type: 'POST', 
      data: {content: items} 
     }); 
    } 
} 

i wezwać go używać:

getDelivery().done(function(data){ // the problem is here 
    if(data == false){ 
     return; 
    } 
}); 

Więc, czy jest jakiś sposób na uniknięcie błędu? Próbowałem bezskutecznie następujące:

if(items.length > 0){ 
    return $.ajax({ 
     url: 'response.php?type=getDelivery', 
     type: 'POST', 
     data: {content: items} 
    }); 
}else{ 
    return false; 
} 

I pojawia się błąd:

Uncaught TypeError: undefined is not a function

Odpowiedz

7

Można po prostu zwrócić odroczone, że sposób, w jaki done() zwrotna nie będzie generować błędy, i można wybrać rozwiązać lub nie

if(items.length > 0){ 
    return $.ajax({ 
     url: 'response.php?type=getDelivery', 
     type: 'POST', 
     data: {content: items} 
    }); 
}else{ 
    var def = new $.Deferred(); 
    def.resolve(false); 
    return def; 
} 

FIDDLE

+0

Perfect. Przyjmie odpowiedź w ciągu 8 minut. Dzięki. – Linesofcode

+3

'return $ .Deferred(). Resolve (false);' działa również i jest nieco mniej gadatliwy. –

Powiązane problemy