Подтвердить что ты не робот

JQuery ajax вызов службы REST

Я пытаюсь сделать вызов ajax из jquery в службу отдыха. Служба остального права находится прямо из учебника блога mkyong, это: http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/

Служба работает, но когда я пытаюсь сделать вызов из jQuery, в Firebug есть код состояния 200, но в разделе ответа ничего.

Вот html-страница с вызовом ajax:

<html>
<head>
    <script type="text/javascript" src="jquery-1.6.2.min.js"></script>
</head>

<body>  

<button id="ajax">ajax call</button>
<button id="json">json</button>

<script type="text/javascript">
    $('#json').click(function(){ 
        alert('json');
         $.getJSON("http://localhost:8080/restws/json/product/get",
         function(data) {
            alert(data);         
          });   
    });

    $('#ajax').click(function(){ 
        alert('ajax');
         $.ajax({ 
             type: "GET",
             dataType: "json",
             url: "http://localhost:8080/restws/json/product/get",
             success: function(data){        
                alert(data);
             }
         });
    });

</script>



</body>

</html>

Я не могу понять, где я ошибся, не могли бы вы рассказать мне, что я делаю неправильно?

Спасибо!

4b9b3361

Ответ 1

Вы используете свой HTML-код с другого хоста, чем хост, который вы запрашиваете. Из-за этого вы заблокированы той же политикой происхождения.

Один из способов использования JSONP. Это позволяет выполнять межсайтовые запросы.

В JSON вы будете возвращены:

{a: 5, b: 6}

В JSONP JSON завернут в вызов функции, поэтому он становится script, а не объектом.

callback({a: 5, b: 6})

Вам нужно отредактировать службу REST, чтобы принять параметр с именем callback, а затем использовать значение этого параметра в качестве имени функции. Вы также должны изменить content-type на application/javascript.

Например: http://localhost:8080/restws/json/product/get?callback=process должен выводить:

process({a: 5, b: 6})

В вашем JavaScript вам нужно будет указать jQuery для использования JSONP. Для этого вам нужно добавить ?callback=? к URL-адресу.

$.getJSON("http://localhost:8080/restws/json/product/get?callback=?",
   function(data) {
     alert(data);         
   });

Если вы используете $.ajax, он автоматически добавит ?callback=?, если вы скажете ему использовать jsonp.

$.ajax({ 
   type: "GET",
   dataType: "jsonp",
   url: "http://localhost:8080/restws/json/product/get",
   success: function(data){        
     alert(data);
   }
});

Ответ 2

Из использования 8080 я предполагаю, что вы используете контейнер сервлетов tomcat для обслуживания вашего априори. Если это так, вы также можете попросить прокси-сервер вашего веб-сервера запросить контейнер сервлета.

С apache вы обычно используете mod_jk (хотя есть и другие альтернативы), чтобы обслуживать веб-сервер за портом 80 вместо 8080, который разрешил проблему с перекрестным доменом.

Это обычная практика, наличие "статического" контента в веб-сервере и динамический контент в контейнере, но оба из-за того же домена.

URL для остальных api будет http://localhost/restws/json/product/get

Здесь описано, как использовать mod_jk для подключения apache к tomcat: http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

Ответ 3

Я думаю, что нет необходимости указывать

'http://localhost:8080`" 

в части URI.. потому что. если вы укажете его, вам придется вручную его менять для каждой среды.

Только

"/restws/json/product/get" also works