I found a work-around that works for me where none of the other solutions posted before have worked (for me). The beauty of this fix is that it works when you are using wifi away from home (e.g. in a coffee shop or hotel) and can't set a static IP because you don't know what numbers the router is using.
Turn on the AirPort, select the network, let it connect. Go to System Preferences -> Network, select your Airport connection then click Advanced, and select the TCP/IP tab. You will see the self-assigned IP address.
Turn your Airport OFF (right click or control click on the icon in the menu bar, select Turn AirPort Off).
In the still-open Advanced settings TCP/IP window, click on Renew DHCP Lease. Do this several times, as it may "renew" with the self-assigned IP address the first few times. Eventually you will get NO IP address. This means you have finally convinced the buggy DHCP process to abandon what it thinks it knows about an IP address you have previously "used" (the useless self-assigned IP address).
Now turn your AirPort back on (right click or control click on the icon in the menu bar, select Turn AirPort On). Let it come on, and connect (or offer to connect) you to your wifi. If necessary, select the wifi you want to connect to.
Watch in the still-open Advanced settings TCP/IP window as your connection gets an IP address. Sometimes it briefly shows the self-assigned address before getting a routable address. When you have a working network connection you need to click "cancel" to close the Advanced settings window and return to the Network settings window, from there you can just close System Preferences.
I have found this to work 100% of the time where none of the other fixes in this thread helped me.