Проблемы с получением правильного ответа от веб-службы - PullRequest
1 голос
/ 09 марта 2011

В настоящее время я разрабатываю веб-интерфейс для веб-службы. Я использую jQuery 1.5.1 в качестве JS-Framework и Firebug для целей отладки.

Прежде всего, я протестировал веб-сервис с расширением Firefox «REST Client». Там следующий запрос выполнен успешно:

{"requestUrl":"http://localhost:8080/Foobar/rest/goods?label=Schro","requestMethod":"GET","requestBody":"","headers":["accept","application/json"]}

Теперь я хочу воспроизвести этот запрос в контексте метода autocomplete () пользовательского интерфейса jQuery:

$("#autocompleteTest").autocomplete({
    source: function( request, response ) {
        $.ajax({
            url: "http://localhost:8080/Foobar/rest/goods/",
            dataType: "json",
            data: {
                label: $("#autocompleteTest").val()
            },
            headers: {'accept':'application/json'},
            error: function(jqXHR, textStatus, errorThrown) {
                log(textStatus + "," + errorThrown);
                log(jqXHR);
            },
            success: function( data ) {
                console.log("bla:" + data);
                response( $.map( data, function( item ) {
                    return {
                        label: item.label + " # " + item.id,
                        value: item.id
                    }
                }));
            }               
        });
    },
       // [...]

Я взял этот рецепт из автозаполнения пользовательского интерфейса jQuery demo

Однако это вызывает событие ошибки. Firebug говорит:

GET http://localhost:8080/Foobar/rest/goods/?label=Schrott - 200 OK 16ms
Antwort-Header
Server  Foobar-Optimizer
Content-Type    application/json;charset=UTF-8
Transfer-Encoding   chunked
Date    Wed, 09 Mar 2011 10:50:03 GMT
Anfrage-Header
Host    localhost:8080
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b12) Gecko/20100101 Firefox/4.0b12
Accept  application/json
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Origin  null

Ошибка jqXHR говорит:

[Object { readyState=0, status=0, statusText="error"}]

и заголовок ответа пуст.

Оба запроса выглядят одинаково в моих глазах, кроме разных результатов. Буду признателен за любые предложения. Спасибо.

Обновление: решение

Это проблема междоменной политики. Я не знал об этом поведении. Решение состоит в том, чтобы изменить тип данных $ .ajax с "json" на "jsonp". Это элегантный способ переопределить эти политики и получить доступ к удаленным веб-службам.

Конечно, веб-сервис должен уметь обрабатывать этот json-запрос.

Здесь упоминается множество других возможностей: http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

1 Ответ

0 голосов
/ 10 марта 2011

Я могу ответить на этот вопрос самостоятельно: это проблема междоменной политики безопасности.Я не знал об этом поведении.

Следующая ссылка содержит несколько подходящих подходов:

http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

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