Dota 2 API ошибка “Uncaught SyntaxError: Unexpected token”

330
06 апреля 2017, 20:11
vm.getDotaApi = function () {
    var url = "https://api.steampowered.com/IDOTA2Match_570/GetLeagueListing/v1/";
    $http({
        method: 'JSONP',
        url: url,
        dataType: 'json',
        responseType: "json",
        callback: 'JSON_CALLBACK',
        params: {
            key: 'my_key*********',
        }
    }).
    success(function (response) {
    }).
    error(function (data, status, headers, config) {
    });
}

В проекте использую AngularJS, серверного кода не использую, только Front-End

Делаю http-запрос на Dota 2, в Network статус запроса 200 (зеленый)

Могу посмотреть данные, которые я мог бы получить (в "Preview")

Но я не могу использовать эти данные, так как не могу зайти в 'success'для манипуляций з полученными данными (сразу перекидывает в 'error'). В консоле ошибка "Uncaught SyntaxError: Unexpected token"

Читал и англоязычный форум и русскоязычный, но нигде не нашел решение этой проблемы.

Answer 1

Ответ сервера не является валидным JSONP-ответом. Более того, это обычный JSON-ответ. насколько мне известно, api.steampowered.com не дает JSONP-интерфейса. И заголовков CORS он тоже не выдает. Поэтому вам нужна серверная часть.

Answer 2

Проблема решается на стороне сервера. Если в общих чертах, то для получения данных браузеры требуют разрешения на сервере. Steam не дает такого разрешения и по-этому нужно самому написать back-end и "разрешить" использовать запросы и получать данные. Я не знаю серверную часть, по-этому мне помог друг. `

        string url = "https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/v1?key=my_key**************";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream receiveStream = response.GetResponseStream();
        StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
        Console.WriteLine("Response stream received.");
        Console.WriteLine(readStream.ReadToEnd());
        response.Close();
        readStream.Close();

`

Пока искал решение проблемы, нашел альтернатива этому оффициальному API для Dota 2 - Opendota Но с этим API сложно организовать сайт с авторизацией и автоматической подгрузкой данных для аккаунта, так как там не используеться ключ Steam, который должен определять пользователя. Но там можете делать обычные get-запросы и спокойно получать данные, без программирования на стороне сервера.

READ ALSO
Вирус на WordPress, редиректит на рекламу

Вирус на WordPress, редиректит на рекламу

Добрый деньОбратился хороший знакомый, попросил убрать вирус с его сайта, не знаю как он туда попал

342
Как ограничить rotation объекта в three.js?

Как ограничить rotation объекта в three.js?

Я загрузил и вывел объект, подключил управление с помощью trackballcontrols

194
Не работает часть программы в javascript

Не работает часть программы в javascript

alert(d / c) не работает, выводит белый экран

205
Задержка в выводе текста

Задержка в выводе текста

При нажимании на клавишу - должно выводить в консоль содержимое поля ввода, но на самом деле выводит на один символ меньше, чем нужно

226