it-swarm.com.ru

JSONP кросс Ошибка источника 'Нет заголовка Access-Control-Allow-Origin присутствует'

Я использую Ajax для получения данных из Twitter, используя их API. Я пытаюсь использовать jsonp, и из того, что я вижу и понимаю, я думаю, что все делаю правильно (хотя, очевидно, нет). 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">  </script>
<script>
    $(document).ready(function () {
        $.ajax( {
            type: 'GET',
            datatype: 'jsonp',
            data: {},
            crossDomain: 'true',
            url: "http://Twitter.com/status/user_timeline/padraicb.json?count=10&callback=?",
            error: function(textStatus, errorThrown) {
                alert("error");
            },
            success: function(msg) {
                console.log(msg);
            }
        });
    });
</script>

Приведенный выше код генерирует ошибку как в Chrome, так и в Firefox. XMLHttpRequest не может загрузить http://Twitter.com/status/user_timeline/padraicb.json?count=10&callback= ?. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Происхождение 'null', следовательно, не разрешено.

Из моего понимания я подумал, что наличие &callback=? и тип, установленный в jsonp, позволят этому добиться успеха. Более того, я вижу, что объект JSON возвращается в fiddler, но сценарий не обрабатывает его. Я пробовал несколько API с одной и той же проблемой.

Один такой API также работает при вводе в адресную строку.

Итак, после тщательного поиска и поиска мне нужно, чтобы установить для Origin значение *? Я думал, что это больше проблема на стороне сервера? 

Я также пробовал ?callback?, но безрезультатно.

Любые идеи будут отличными, спасибо.

9
Corey

Указанный ресурс поддерживает jsonp, поэтому CORS не нужен ... проблема в datatype: 'jsonp', это должно быть dataType: 'jsonp'

$(document).ready(function () {
    $.ajax({
        type: 'GET',
        dataType: 'jsonp',
        data: {},
        url: "http://Twitter.com/status/user_timeline/padraicb.json?count=10&callback=?",
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(jqXHR)
        },
        success: function (msg) {
            console.log(msg);
        }
    });
});

Демонстрация: Fiddle

18
Arun P Johny

Заголовок должен быть установлен на серверах Twitter, когда они отвечают. Если он недоступен, то это означает, что вы не можете получить доступ к этому ресурсу с помощью AJAX из-за пределов своего собственного домена.
Следовательно, вы не можете использовать их API из JavaScript в браузере. У вас есть собственный сервер, который выступает в качестве промежуточного ресурса для связи с Twitter API. 

Правка: Также стоит отметить, что Twitter закрывает свои неаутентифицированные запросы API. Вам нужно настроить приложение с помощью Twitter и использовать ключ API для отправки запросов. 

0
Munim