Note. I don't have enough reputation to link all the technologies in the answer, so sometimes you will see links copied into plain text.
1) Assigning users to the local server with the least delay is not always possible.
Sometimes the geographically closest server to the user is unexpectedly the one with the highest latency.
Finding the smallest delay between your (running) servers and users is not an easy task. There can be many different transitions (routers) between the client and server, and any of them can have problems at any time, update routes, packet overflows, etc. The fastest way to evaluate the delay is ping, but it may be that firewalls block it.
So the best way to achieve this is to use anycast
All major CDN providers implement this method. Some use the anycast TCP protocol, which does not seem to be recommended, and others use anycast UDP. This is an open debate.
In any case, in order to implement anycast, you must be able to consult ISP routers, and this is usually not possible. In addition, there are good peers and bad colleagues. Finally, all this requires a deep knowledge of the routing protocols and the TCP / IP stack.
A quick and dirty solution might be to use BIND with the GEO-IP patch. In this way, you can define specific responses to DNS queries for each country. I mean, for example, if you have a server in the UK and one in the USA, you can configure BIND to respond to users from Europe to get to the British server and users from the USA to get to the American server.
2) To assign a specific client to a specific server, you can use the technique described in paragraph 1, or you can use a proxy server and sticky sessions. HA-Proxy is a good product to achieve this. (URL: xy.1wt.eu)
3) if you use point 1, you will not have problems with ajax cross calls. In fact, it is completely transparent to the client. For example, for the same domain example.com, a user from the USA will allow it to 1.1.1.1, while a user from Germany will allow example.com to 2.2.2.2 (the IP addresses are fake and are used as an example).
On the side note, the solution for cross domain ajax call is JSON-P, which has some disadvantages, such as lack of POST support.
If I were you, I would go with BIND and GEO-IP, because one day it would solve all three problems. (part for the delay, because it is not always true that the geographically closest server is the one with the lowest latency.)