Sainsbury's has apologised to online shoppers after it was unable to deliver their food by Christmas.