я просто не могу заставить Джонс работать. полная остановка. я скопировал http://api.jquery.com/jQuery.getJSON/ без удачи - PullRequest
0 голосов
/ 20 апреля 2011


        $("#thumbnails .thumb").find(".viewsCount").each(function(){
        var PostID = $(this).html();
        $.getJSON("http://tom.is-a-geek.org/tumblr/counters/thomee/go.php?c=yeeeboiii&i=" + PostID + "&justCount=y&format=json&jsoncallback=?",function(data){
             $.each(data.items, function(i,item){
                //$(this).html(item.views); 
                alert(item.views);
                alert("sigh");
            });         
        });
    });

({
    "items": [
     {
        "views": "20"
     }
    ]
})

live @ http://thomee.tumblr.com

любая помощь будет принята с благодарностью.: - (

Ответы [ 2 ]

4 голосов
/ 20 апреля 2011

Вы не можете сделать кросс-сайт getJSON по соображениям безопасности.Так что или используйте локальный (я имею в виду локальный, как в «том же домене») URL-адрес в getJSON или попробуйте использовать JSONP hack / обходной путь: http://code.google.com/p/jquery-jsonp/

2 голосов
/ 20 апреля 2011

Как Франтишек говорит , межсайтовый ajax (getJSON - это ajax under-cover) ограничен Одинаковой политикой происхождения .

У вас есть много вариантов:

  • Как говорит Франтишек, вы можете использовать JSON-P , если соответствующий сервер его поддерживает.
  • Если целевой сервер поддерживает CORS и браузер, который использует посетитель, поддерживает его (последние версии), он будет работать (за исключением того, что для версий IE, которые поддерживают CORS - 8 и 9 - требуется). специальная обработка, а не просто работа, как в Firefox и Chrome).
  • Вы можете использовать YQL в качестве прокси .

(Это CW, потому что на самом деле это просто большое дополнение к ответу Франтишека. Не очень удобно добавлять все это к этому ответу, хотя в теории, конечно, это и есть StackOverflow, совместно отвечающий на вопросы.)


Отдельно, к вашему сведению, JSON, который вы цитировали:

({
    "items": [
     {
        "views": "20"
     }
    ]
})

... недействительно, JSON не имеет оператора скобок. Это должно быть:

{
    "items": [
     {
        "views": "20"
     }
    ]
}

Причина, по которой вы иногда видите круглые скобки рядом с текстом JSON, заключается в том, что при оценке JSON иногда люди используют синтаксический анализатор JavaScript для анализа JSON (поскольку JSON является подмножеством буквенной нотации объектов JavaScript):

var result = eval("(" + jsonString + ")");

Они ставят круглые скобки, чтобы гарантировать, что синтаксический анализатор оценивает содержимое jsonString, где ожидается выражение . Но скобки не являются частью JSON, и правильный синтаксический анализатор JSON потерпит неудачу, если вы используете JSON, который вы указали. (В отношении этой техники eval: Только используйте ее, если вы знаете, что источник JSON заслуживает доверия [ваш собственный сервер и т. Д.]; В противном случае лучше всего использовать реальный анализатор JSON для защиты от внедрения скрипта атак, скобки не являются удаленной проекцией против них. Вы можете найти три парсера JSON - один, который опирается на eval, но сначала делает несколько проверок, и два, которые вообще не используют eval - на страница GitHub Дугласа Крокфорда , изобретатель JSON.)

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