Это из-за политики одного и того же происхождения. AJAX-запросы по умолчанию не могут пересекать границы домена, даже если это поддомен (даже для mysite.com и www.mysite.com, или https://mysite.com и http://mysite.com).. Вы можете узнать об этом чуть больше функция безопасности здесь:
http://en.wikipedia.org/wiki/Same_origin_policy
Поскольку это ограничительное ограничение очень проблематично для разработчиков, более новые браузеры поддерживают инфраструктуру политик, называемую CORS (Cross-Origin Resource Sharing), которая позволяет вам указывать разрешенные хосты для связи. К сожалению, базовая поддержка не была реализована в Internet Explorer до версии 8, поэтому, если вам нужно поддерживать IE6-7, она не будет работать для вас:
http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
То, что большинство людей будут делать в этой ситуации, это использовать вместо этого JSONP, который использует тот факт, что обычные теги сценариев не связаны политикой того же источника, и поэтому ответ JSON обернут в вызов функции и выполнен браузером, позволяя обратному вызову доступ к этим данным. Дополнительная информация о JSONP:
http://en.wikipedia.org/wiki/JSONP
Одним заметным ограничением JSONP является то, что он может использоваться только для запросов GET к серверу (не POST или других типов запросов HTTP).
Многие популярные JavaScript-фреймворки, такие как jQuery, поддерживают JSONP в качестве опции (чаще всего путем переключения переменной типа запроса при создании запроса AJAX), но, очевидно, вам все равно необходимо настроить серверный скрипт, который обрабатывает на эти запросы ответьте соответственно.