2014-04-16 18 views
6

Tôi có một hàm trả về kết quả (hoặc không). Vấn đề là khi nó không trả lại bất kỳ giá trị nào tôi nhận được trong bảng điều khiển, hãy nhắn tinjquery Không thể đọc thuộc tính 'thực hiện' không xác định - tránh điều này

cannot read property 'done' of undefined

Điều này đúng và tôi hiểu vấn đề. Ngoài ra, lỗi này không làm cho mã của tôi ngừng hoạt động, nhưng tôi muốn biết liệu có cơ hội tránh điều này không?

Các chức năng trong ajax là:

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} 
     }); 
    } 
} 

Và để gọi nó là tôi sử dụng:

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

Vì vậy, là có cách nào để tránh được những lỗi? Tôi đã cố gắng nhưng không thành công như sau:

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

Và tôi nhận được lỗi:

Uncaught TypeError: undefined is not a function

Trả lời

7

Bạn chỉ có thể trở lại một trì hoãn, cách mà các done() callback sẽ không tạo ra lỗi, và bạn có thể chọn để giải quyết nó hay không

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. Sẽ chấp nhận câu trả lời trong 8 phút. Cảm ơn. – Linesofcode

+3

'return $ .Deferred(). Resolve (false);' cũng hoạt động và tiết kiệm hơn một chút. –

Các vấn đề liên quan