2013-04-12 2 views
1

Моего вебсервиса возвращает объект JSON как следующегоКак обработать ответ JSON с помощью Ajax вызова

["abc","xyz","option_3"] 

т.е. когда я ставлю этот адрес в браузере Chrome http://localhost:8088/rest/getOptions я получаю выше.

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

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script type="text/javascript"> 
     url="http://localhost:8088/rest/getOptions"; 
     var ajaxResult = null; 
     function getData(yt_url){ 
      $.ajax 
      ({ 
       type: "GET", 
       url: yt_url, 
       dataType:"json", 
       async: false, 
       success: function(response){ 
        ajaxResult = response; 
       } 
      }); 
     } 
     getData(url); 

    alert(ajaxResult); 

    </script> 
</head> 
<body> 
</body> 
</html> 

Я всегда получаю null в окне предупреждения , Я дважды проверял с помощью fiddler2, что запрос/ответ webservice проходит отлично, я даже могу перехватить json-объект между webservice и браузером.

Я также попытался

var obj = JSON.parse(ajaxResult); 
alert(obj); 

я получаю пустой снова.

Я уже посмотрел Ajax call for the json response и другие подобные вопросы. Пожалуйста, см. Мой JSON немного отличается, так что либо решение не будет применяться в моем случае, либо я не последовал за ними.

Я новичок в скрипте AJAX и Java, пожалуйста, сообщите.

EDIT: addding ДЖЕРСИ кода вебсервиса который обслуживает этот отдых/getOptions конечной точке

@GET 
@Path("getOptions") 
@Produces(MediaType.APPLICATION_JSON) 
public List<String> getOptionsJson() { 
    //build alloptions List<String> 
    return alloptions ; 
} 
+0

Когда вы используете 'jsonp', ваш веб-сервис переносит данные с информацией, переданной параметром' callback'? –

+0

Jon - у него Async установлен на false, его предупреждение должно работать, если остальная часть кода в порядке – 99823

+0

нет, это не так .. Я использовал json раньше, я начал получать ошибку доступа в chrome, поэтому я начинаю использовать jsonp. но я собираюсь изменить вопрос, потому что я получаю ту же ошибку, когда я использую json в Firefox. – Watt

ответ

2

Update

Вы редактировали вопрос; вы не можете использовать dataType: 'json' из-за междоменных проблем, которые могут быть преодолены только с помощью прокси-сервера в том же домене или через CORS.

При использовании dataType: 'jsonp' вы не можете использовать async: false; это потому, что на самом деле он не использует XMLHttpRequest, но использует тег <script>, чтобы сделать его междоменным. Я считаю, что jQuery просто игнорирует настройку async без предупреждения.

Следовательно, alert() всегда будет пустым, и вы должны переместить его в обратный вызов успеха.

Для поддержки JSONP ваша веб-служба должна обернуть возвращенные данные в вызов функции, идентифицированный параметром GET , например.

callback([1, 2, 3]) 

Если ваш веб-сервис не поддерживает это, как уже упоминалось ранее, вам нужно будет использовать CORS, например, добавьте этот заголовок ответа:

Access-Control-Allow-Origin: * 
+0

Спасибо! Есть ли способ заставить его работать, не касаясь кода webservice? – Watt

+0

@Watt Если служба не предоставляет поддержку JSONP, вам придется использовать CORS. –

+0

Если это не так уж сложно, не могли бы вы дать мне рабочую версию кода? Потому что я не уверен, как сделать обратный вызов ([]) или использовать CORS. Я также добавил часть веб-сервиса для уточнения. – Watt

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