2012-06-07 3 views
2

Я пытаюсь создать страницу, которая показывает ссылки на кучу моих сообщений в блоге, и небольшой пузырь рядом с каждой ссылкой с комментарием для этого сообщения. Мысль простейший способ сделать это будет заключаться в использовании «Javascript public API», о котором говорит disqus в своих dev docs.Disqus Javascript API crossdomain issue на localhost

Если я посещаю эту ссылку в браузере я получаю JSON Я ищу:

https://disqus.com/api/3.0/threads/details.json?forum=BLOG_FORUM&thread:ident=BLOG_THREAD&api_key=PUBLIC_API_KEY

Однако, когда я пытаюсь загрузить его из JQuery это дает мне страшный XMLHttpRequest не может нагрузка: происхождения не разрешено Access-Control-Allow-Origin.

Я попытался использовать $ .getJSON() и $ ("# div"). Load(), чтобы загрузить его.

Я добавил как localhost, так и 127.0.0.1 в настройки «Домены, связанные с моим открытым ключом» в Disqus API.

+0

Я не могу найти «Javascript public API», о котором вы говорите. На их [странице JavaScript] есть несколько вещей (http://docs.disqus.com/developers/js/), но ничего подобного не звучит. –

+0

Они говорят об этом здесь, в первом предложении: http://disqus.com/api/docs/requests/, но они больше не объясняют :( – user573117

+0

Проблема в том, что вам нужно сделать запрос JSONP. facto для этого параметра является параметром обратного вызова. С помощью 'jQuery.getJSON' вы можете просто добавить' & callback =? ', а jQuery будет от него оттуда. Я все еще думаю, что' count.js' проще для этого конкретного сценария. –

ответ

3

Чтобы использовать клиентскую часть this API, вам необходимо выполнить запрос JSONP. Стандартом де-факто для этого является параметр обратного вызова, определяющий имя функции. Disqus также требует изменения .json до .jsonp С jQuery.getJSON вы можете просто добавить &callback=?, а jQuery возьмет его оттуда.

+0

У меня всегда плохая просьба, я не понимаю. Я использую Mootools -> Request.JSONP ({..}). Send(); Как адрес: "https://disqus.com/api/3.0/threads/list.jsonp?api_key=9ldXlWCWlsyjMI3qvf03Y8OQCNxvAMklHkrNVcpBKm220XJHXsU0QDdr0TCLM1kz&callback=?" Можете ли вы мне помочь ??? – Donovant

0

На самом деле вы можете сделать это, просто используя атрибуты сценария и данных, следуя these instructions. Вы просто загружаете скрипт Disqus count.js, затем используете атрибуты data-.

EDIT: вы можете настроить его, чтобы просто показать целое число here (тогда вы можете по стилю по своему желанию).

+0

omising Matthew, спасибо, попробуем немного и дам вам знать, как это работает. – user573117

+0

Это невозможно при использовании отдельных страниц. – CMCDragonkai

1

Я думаю, вам просто нужно этот заголовок в верхней части:

<?php header('Access-Control-Allow-Origin: http://disqus.com'); ?> 
3

Вы не можете добавить «локальный» как запись Origin в заголовке ответа. Это происходит из-за спецификации JavaScript безопасности для CORS

Access-Control-Allow-Origin может быть установлен в *, чтобы любой веб-сайт, чтобы получить доступ к данным через XMLHTTPRequest/AJAX Но вы не можете установите его на «localhost».

Возможное решения для преодоления проблем является: Чтобы разместить страницу, которая делает запрос в публичном домене/месте и включает в себя имя хоста в заголовке ответа Access-Control-Allow-Origin.

как «@Matthew Flaschen» упоминалось, вы можете использовать запрос JSONP с &callback=? для выполнения этой

Или в крайнем случае, загрузите результат в формате JSON вместе со сценарием в <script> тег, указав URL в «ЦСИ» атрибут и получить доступ к данным в формате JSON
например: изменить результат в стороне сервера, чтобы включить <variable_name>={JSONObject} техники и при загрузке сценария, данные доступны через эти переменные
некоторых людей получили такие же вопрос here

Все еще не могли понять, почему браузеры запрещают Access-Control-Allow-Origin=localhost, но они поддерживают Access-Control-Allow-Origin=* (это означает, что любые общедоступные сайты могут получить доступ к данным, но ..........) Возможно, в этой вещи может быть какой-то заговор (дорожки сайтов что доступ к данным)

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