I've got an online O2 contract, they promised me a particular phone when my contract was due for renewal earlier this year (I rang them about something else a few weeks before my contract ended.) Then when I rang to renew the contract and get the new phone I was told I wasn't eligible (as I hadn't spent enough money with them over the past year - one month I had a bill of over £200

) So I asked to cancel when the contract was up - and lo and behold I was phoned back with the offer of the exact phone I wanted - for free.
So it's always worth a try!