Использование JQuery для доступа к службе данных / API через домены - PullRequest
0 голосов
/ 16 сентября 2009

Я пытаюсь получить доступ к стороннему API через HTTP, используя jquery .ajax (или .get, .post и т. Д.). API находится на моей машине на

http://localhost:7777/server/<method>?<args>

Сервер имеет набор методов для запроса своего OLAP-сервера, таких как вход в систему (который возвращает ключ входа в систему для использования с другими методами), базы данных (в которой перечислены базы данных на сервере), кубы, измерения и т. Д.

например

Для входа на сервер

http://localhost:7777/server/login?user=admin&password=21232f297a57a5a743894a0e4a801fc3

Если я введу это в адресную строку браузера, я верну правильные данные.

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

Вот мой код

<html>
<head>
    <title>Palo Test Report</title>
    <script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
        <script type="text/javascript" language="javascript">            
        function calculate(){
            $.ajax({
                type:"GET",
                url:"http://localhost:7777/server/login?user=admin&password=21232f297a57a5a743894a0e4a801fc3&callback=?",
                success: function(data,textStatus){
                    alert(data + ":" + textStatus);
                }
                ,
                error: function(request,errorStatus,errorThrown){
                    alert("Error:" + errorThrown);
                }
            });
        }
    </script>
</head>
  <body>
      <div>Sample Palo Report #1</div>
      <input type="button" value="Calculate" onclick="calculate();" />
  </body>
</html>

Метод отправляется на сервер и выполняет запрос обратного вызова. Однако параметр данных представляет собой пустую строку.

Я прочитал несколько постов, касающихся проблем с междоменным доступом через ajax, и похоже, что это может происходить, когда служба запускается через другой порт, хотя меня немного удивляет флаг «успех». Еще одна странность заключается в том, что если я создаю новый виртуальный каталог в IIS и помещаю туда файл, я запускаю функцию обратного вызова с пустым параметром errorThrown.

Служба / API возвращает простые строки, а не json, поэтому getJSON не работает.

Возможно ли то, что я пытаюсь с jQuery?

У меня есть обходной путь, но он довольно уродливый!

Заранее спасибо

G

Ответы [ 2 ]

2 голосов
/ 21 сентября 2009

Полагаю, ваша тестовая веб-страница расположена на http://localhost:7777, потому что иначе она не будет работать.

$. Ajax работает как положено, но так как вы не указали опцию dataType: "jsonp" :

  • предполагается, что извлеченные данные XML или HTML («умное» предположение согласно документу, но мы все знаем, что на самом деле означает интеллект, когда дело доходит до алгоритмов)
  • это не мешает обрабатывать часть URL callback =? (если вы отслеживаете сетевой трафик с помощью что-то вроде firebug, вы можете легко контролировать, что часть callback =? URL остается как есть)

Теперь ответ сервера определенно не XML или HTML , но запрос выполнен успешно. Таким образом, в итоге ваш обратный вызов успеха вызывается с пустым параметром данных (хотя я ожидал бы базовый документ HTML с текстом ответа в его теле).

Просто добавьте dataType: "jsonp" в настройках, и все должно работать как положено.

1 голос
/ 16 сентября 2009

Ajax-звонки ограничены одним и тем же доменом. Вам нужен jsonP для запроса стороннего домена. Проверьте ajax () метод jsonP опция.

UPDATE

CORS (Распределение ресурсов между источниками) также присутствует в качестве рабочего проекта от w3c.

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