Вот случай, когда у вас есть доступ к двум различным доменам, которые вы можете контролировать, и вам нужно сделать вызов в режиме crossdomain. Таким образом, это случай, когда вы не можете этого избежать, и вы не можете контролировать возврат данных в формате JSONP.
var script = document.createElement('script');
script.type = "text/javascript";
script.src='path to crossdomain source.js';
document.getElementsByTagName("head")[0].appendChild(script);
lookupInterval = setInterval("function_to_call()", 1000);
var lookupCounter=0;
function function_to_call(){
//give up after 5 times
if(++lookupCounter == 5)
return clearInterval(lookupInterval);
try{
var cities = GEO_DATA_2011_11_28.cities.city;
//since we found our data, let's clean the interval call
return clearInterval(lookupInterval)
}
catch(e){
//do nothing, we are actually controlling the situation with the if condition at the beginning
}
}
Мы определяем наши данные в удаленном JS файл, как вар GEO_DATA_2011_11_28 = {} в формате JSON. Хитрость заключается в том, что мы динамически вставляем файл сценария в головную часть нашего HTML. Поскольку блоки скриптов могут без проблем загружать скрипты crossdomain, мы можем сделать это отложенным образом. Учитывая, что могут возникнуть задержки загрузки скрипта, мы вызываем вызов функции, которая проверяет данные, которые мы хотим получить.
Это решение было необходимо, потому что не было возможности отправлять данные в JSONP, поэтому мы зависели от чтения простых js-файлов.
Нет, '.getJSON' предназначен для извлечения данных JSON из того же домена. jQuery автоматически проанализирует данные в структуре данных JavaScript. Если вы хотите совершать перекрестные вызовы, вы должны использовать JSONP (который вы можете использовать '.getJSON'), который должен поддерживаться сервером. –