доступ к объекту json с помощью javascript (без var) - динамически вызывается в файле (эксперимент) - PullRequest
0 голосов
/ 01 января 2012

Я создаю страницу, которая вызывает динамический контент из Интернета с помощью javascript и, очевидно, наталкивается на проблему с SOP (та же политика происхождения). Я знаю, что это не сработает на рабочей странице, так как вызовы нужно будет проверять насервер, но у меня есть его в точке, где он практически работает, но я не могу получить доступ к данным.Я действительно хотел бы знать, если это возможно.

Код ниже добавляет URL к файлу:

var url = 'http://theSite.com/?query=' + userInput + '&othercode';
var script = document.createElement('script');
script.setAttribute('src', url);
script.setAttribute('type', "application/json");
script.setAttribute('id', "special");
document.getElementsByTagName('body')[0].appendChild(script);

Это добавляет следующее в мой HTML:

<script src="http://theSite.com/?query=userInput&othercode" type="application/json" id="special"></script>

Теперь проблема: как мне получить доступ к полученным данным?Я получаю JSON-скрипт, но не знаю, как присоединить его к переменной в Javascript или использовать его!

код приходит в следующем базовом формате:

{"count":5,"results":[{"name":"value","id":"value2", ..... }], ...  "code":200}

Как получить доступ к даннымили назначить его переменной?

(я еще не пробовал jQuery и знаю, что, вероятно, будет проще, но если кто-нибудь может помочь с этим кодом, это было бы лучше, чем пытаться делать все это снова в jQuery).

1 Ответ

1 голос
/ 01 января 2012

Вам необходимо контролировать службу, которую вы вызываете (theSite.com).Один из вариантов - заставить его возвращать JSONP вместо JSON:

dataCallback({"count":5,"results":[{"name":"value","id":"value2", ..... }], ...  "code":200});

Или сделать свой скрипт внутри iframe, который подается с theSite.com, и использовать postMessage, чтобы сообщить свой результат обратноваше окно.

В противном случае ... ну, вы делаете именно то, что пытается предотвратить SOP, так что шансы мрачны, AFAIK.

О, еще один вариант: сделать AJAXпозвоните на ваш сервер, который сделает сервисный звонок и передаст данные вам.Серверы не ограничены, как клиенты.

...