If jsonp is not an option, and you don't mind putting in the extra work, then a good solution is to write a small reverse proxy.
In computer networks, a reverse proxy is a type of proxy server that
retrieves resources on behalf of a client from one or more servers.
These resources are then returned to the client as though they
originated from the proxy server itself.
wikipedia - reverse proxy
You can write your reverse proxy using any number of http server frameworks, for example Nancy for C# or a node.js server for javascript / coffeescript.
The important thing is to make sure the proxy runs under the same domain as your angular app. Now you can route all your ajax calls from your angular app through your proxy and, because its on the same domain, there are no cross-site issues.
The proxy is then free to make calls to whatever APIs you like, typically for me this will be my own custom API that encapsulates all my business logic and whatever calls I need to make to 3rd party APIs like, say, google translate. The job of the proxy is to make the calls and return the json to the angular app.
Doing things this way has the added bonus that your proxy can repackage the json from the 3rd party APIs to fit in with whatever standards you might have in your angular app. This is especially useful for dealing with errors from a variety of sources. Your proxy handles the error and passes back a standardised error package to the angular app.
In fact, experience has shown that once you have a proxy in place you start to find a whole lot of uses for it. Who, for example, would want to make a call from angular to an API that requires a secret API key? Doing that exposes the key right there in your client code ready for anybody to misuse. With a proxy all those details remain securely hidden on the server.
If you do go down the node.js route then consider using request for making your http calls as this provides explicit support for proxy-ing and piping requests/responses.