Доступ к службе JSON с локального хоста или из файла: // - PullRequest
5 голосов
/ 14 марта 2011

Я делаю html-страницу, предназначенную для локального запуска на ПК, желательно без запуска локального сервера (file: //).Я также использую jQuery, чтобы немного упростить манипуляции / AJAX.

Я пытаюсь загрузить 2 результата из API Twitter, но получаю ошибку.Код выглядит следующим образом:

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9", {},
    function (data) {
        $.each(data.items, doSomething1);
    });
$.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9", {},
    function (data) {
        $.each(data.items, doSomething2);
    });

Я также попытался следующий код, но это не изменило результат.

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json",
    {
        count:          "9",
        screen_name:    "someuser"
    },
    function(data) {
        $.each(data.items, updateAWTweets);
    });
$.getJSON("http://search.twitter.com/search.json",
    {
        q:              "somequery",
        result_type:    "recent",
        count:          "9"
    },
    function(data) {
        $.each(data.items, updateHashTagTweets);
    });

Я получаю следующую ошибку в Chrome (насервер localhost):

XMLHttpRequest cannot load http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9. Origin http://localhost:62153 is not allowed by Access-Control-Allow-Origin.

или (с файлом: // ссылка)

XMLHttpRequest cannot load http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9. Origin null is not allowed by Access-Control-Allow-Origin.

Кто-нибудь знает, как я могу это исправить?

Ответы [ 3 ]

11 голосов
/ 14 марта 2011

Вы сталкиваетесь с ограничением политики одного и того же происхождения - ваш сценарий не может получить доступ ни к какому другому домену, кроме того, с которого он был загружен.

  1. Вы можете попробовать JSONP - это одно из распространенных решений для передачи данных по доменам:

    Ваш код будет выглядеть примерно так (обратите внимание на добавление callback=? к URL):

    $.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9&callback=?", 
              {},
              function (data) {
                      $.each(data.items, doSomething2);  
         });
    
  2. Другой вариант - настроить прокси - вы можете использовать Apache httpd в качестве прокси / обратного прокси, чтобы обойти это ограничение.

6 голосов
/ 14 марта 2011

Добавьте обратный вызов JSONP JQuery к URL

$.getJSON("http://search.twitter.com/search.json?callback=?", {
0 голосов
/ 28 января 2013

Не используйте это $.getJSON() Это не гибкий .. Вы можете использовать

$.ajax({
    url:"test.json",
    dataTypr:"json",
    async:false
}).responseText;

это можно легко получить с помощью html-кода ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...