2010-07-22 2 views
1

Извините, если мой вопрос немного повторяется, но я не нашел ответа на свой вопрос, поэтому отправлю его здесь.Анализ XML-ответа

Итак, вот этот URL, который я использую для создания системы безопасности-маркер:

api.sandbox.inrix.com/Traffic/Inrix.ashx?Action=GetSecurityToken & VendorID = 1043016094 & consumerId = 94ce0781- b32f-4da5-b80b-8ca00cfb2194

Ответ на ввод вышеуказанного URL-адреса в браузере - это дерево XML, отображаемое в браузере. Мне нужно извлечь данные в теги «AuthToken». Я написал код в JavaScript, который извлекает данные из тегов из XML-файла и вместо указания пути файла XML я передал ему вышеуказанный URL-адрес. Тем не менее, я получаю сообщение anAlert:

Доступ к ограниченному URI запрещен.

Любые предложения?

Спасибо.

ответ

1

Функция безопасности всех браузеров не позволяет создавать XMLHttpRequests в других доменах. Это называется Same Origin Policy. Существует несколько способов обойти одну и ту же политику происхождения,

1. Предоставьте прокси-сервер службе, используя серверный язык.
Как правило, вы бы делать запросы непосредственно в веб-службу, которая в свою очередь, возвращает ответ, например, так:

 
    ╒═══════════════════╕ ──────────────> ╒═══════════════════╕ 
    │ Client/Javascript │      │ Server/WebService │ 
    ╘═══════════════════╛ <────────────── ╘═══════════════════╛ 

проксирование включает в себя написание сценария на стороне сервера, чтобы выступать в качестве среднего человека:

 
╒═══════════════════╕ ────> ╒════════════════════╕ ────> ╒═══════════════════╕ 
│ Client/Javascript │  │ Same domain server │  │ Server/WebService | 
╘═══════════════════╛ <──── ╘════════════════════╛ <──── ╘═══════════════════╛ 

Таким образом, браузер отправляет запрос в тот же домен, но не блокируется политикой того же происхождения. Сервер, в свою очередь, отправляет запрос удаленной веб-службе, которая возвращает ответ. Наконец, тот же сервер домена возвращает этот ответ скрипту, который все еще ждет. Это работает, потому что запросы, сделанные сервером, не подпадают под действие политики одного и того же происхождения.

2. Проверьте, поддерживает ли служба формат данных JSONP.
JSONP работает, добавляя к текущей странице элемент сценария, с атрибутом src, указывающим на веб-службу. Веб-служба возвращает ответ в виде вызова функции JavaScript с данными в литеральном объекте JavaScript, который передается в качестве аргумента функции. Все, что вам нужно сделать, это предопределить эту функцию, чтобы при завершении запроса сценария/веб-службы ваша предопределенная функция вызывается с данными, чтобы вы могли ее обработать.

+0

спасибо за ваш ответ Энди, однако, можете ли вы прояснить, как можно «предоставить прокси-сервер для службы с использованием серверного языка»? Спасибо – Jason

+0

@ Джейсон: извините за задержку, я был немного занят. Я обновил сообщение с дополнительной информацией и диаграммами :-) –

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