2015-06-04 1 views
1

Я пытаюсь использовать Surface API по Mapbox для анализа местности между двумя заданными точками. Я беру координаты двух точек и отправляю вызов AJAX API, но я застрял в печально известной проблеме CORS.Как работать с проблемой CORS в API поверхности от mapbox?

Для начала я пытаюсь использовать URL, предоставленный самой MapBox в своих примерах:

$('#runTerrainAnalysis').on('click', function(e){ 
    var url = 'https://api.tiles.mapbox.com/v4/surface/mapbox.mapbox-terrain-v1.json?layer=contour&fields=ele&points=-112.084004,36.05322;-112.083914,36.053573;-112.083965,36.053845&access_token=pk.eyJ1Ijoicm9oYW4wNzkzIiwiYSI6IjhFeGVzVzgifQ.MQBzoHJmjH19bXDW0b8nKQ'; 
    $.ajax({ 
     url: url, 
     method: 'GET', 
     success: function(response){ 
      console.log(response); 
     }, 
     error: function(response){ 
      console.log(response); 
     } 
    }); 
}); 

Cross-Origin Request заблокированный: The Same Origin Policy не разрешает чтение удаленного ресурс в https://api.tiles.mapbox.com/v4/surface/mapbox.mapbox-terrain-v1.json?layer=contour&fields=ele&points=-112.084004,36.05322;-112.083914,36.053573;-112.083965,36.053845&access_token=pk.eyJ1Ijoicm9oYW4wNzkzIiwiYSI6IjhFeGVzVzgifQ.MQBzoHJmjH19bXDW0b8nKQ , (Причина: заголовок CORS «Access-Control-Allow-Origin» отсутствует).

Как это получить?

+0

Try включать: 'crossDomain: true' –

ответ

0

Мы можем отправить междоменный AJAX запросы с использованием JSONP. Ниже приводится простой JSONP Запрос:

$.ajax({ 
    url : url, 
    dataType:"jsonp", 
}); 

Source

Работая как шарм. :)

0

API-интерфейс Mapbox поддерживает cross-origin requests без каких-либо ограничений домена, поэтому он должен быть связан с jquery.

Попробуйте включить crossDomain: true:

$.ajax({ 
    url: url, 
    crossDomain: true, 
    method: 'GET', 
+0

No. Безразлично» к сожалению. – Rohan

+0

Я проверил здесь (с вашими данными) с помощью angularjs, а возврат - ** _. Функция не включена. Пожалуйста, прочитайте https://www.mapbox.com/blog/introducing-the-surface-api для получения дополнительной информации. "_ ** –

+0

Да, открытый ключ неправильный, но даже тогда я должен получить ошибку, которую вы получаете. Я также попробовал правильный открытый ключ. Я пробовал его с помощью Postman REST-клиента, и я могу увидеть заголовок 'Access-Control-Allow-Origin → *', который означает, что он включен, и результат также ожидается. Но когда я пытаюсь использовать мой jquery, это не работает. :( – Rohan

0

Похоже, вы еще не запросили доступ к API-интерфейсу Surface (сейчас он находится в частной бета-версии). Это:

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script> 
<script> 
    var url = 'https://api.tiles.mapbox.com/v4/surface/mapbox.mapbox-terrain-v1.json?layer=contour&fields=ele&points=-112.084004,36.05322;-112.083914,36.053573;-112.083965,36.053845&access_token=pk.eyJ1Ijoicm9oYW4wNzkzIiwiYSI6IjhFeGVzVzgifQ.MQBzoHJmjH19bXDW0b8nKQ'; 
    $.ajax({ 
     url: url, 
     method: 'GET', 
     success: function(response){ 
      console.log(response); 
     }, 
     error: function(response){ 
      console.log(response); 
     } 
    }); 
</script> 

возвращает ожидаемый результат:

{"message":"Feature not enabled. Please read https://www.mapbox.com/blog/introducing-the-surface-api for more information."} 

Вы можете запросить доступ в нижней части этой страницы: https://www.mapbox.com/blog/introducing-the-surface-api/

Смежные вопросы