AJAX POST / GET запрос выдает пустую ошибку, но сервер Glassfish, кажется, отвечает правильно - PullRequest
2 голосов
/ 21 января 2012

Я установил несколько очень простых веб-сервисов на своем сервере Glassfish, используя JAX-RS.Первоначально все, казалось, работало правильно - я видел ожидаемые ответы через браузер (например, возвращенный HTML).Вот код:

@GET
@Produces("text/HTML")
public String getHtml() {
    return "<html lang=\"en\"><body><h1>GET RESPONSE</body></h1></html>";
}

@POST
@Produces("text/HTML")
@Consumes("text/plain")
public String postText(String content)
{        
    return "<html lang=\"en\"><body><h1>POST RESPONSE: " + content + "</body></h1></html>";
}

Как видите, это действительно просто.

Проблема возникла, когда я попытался сделать вызовы AJAX в Javascript для этих веб-сервисов.Как вызовы POST, так и GET терпят неудачу последовательно, без полезной информации об ошибках.Я проверяю результаты ответа в Firefox-плагине Firebug, хотя коды ответов показывают 200 ok, хотя Firebug ничего не показывает на панели HTML, что может указывать на проблему.Вот Javascript:

$.ajax({
    type: "POST",
    url: "http://localhost:8080/TestEngine/API/",
    data: "string",
    dataType: "html",
    success: function(data, textStatus, jqXHR) {
        alert("success");
    },
    error: function(jqXHR, textStatus, errorThrown) {                             
        alert("error:" + errorThrown );
    },
    contentType: "text/plain"
});

Я пробовал различные модификации и исключения данных, dataType, contentType и т. Д., Но они всегда заканчивали тем, что вызывали обратный вызов ошибки.Я также пытался изменить возвращаемое значение функций GET и POST, в том числе пытался использовать JAX-RS Responsebuilder (хотя я не знаком с его использованием, поэтому, возможно, сделал это неправильно).Я все еще в конечном итоге в обратном вызове ошибки, без видимой полезной информации в аргументах ошибки (большинство вещей просто возвращается как неопределенное или пустое).

В этот момент я действительно буду признателен за некоторые советы относительно того, чтоЯ делаю неправильно.Спасибо!

1 Ответ

0 голосов
/ 24 января 2012

Я решил проблему - мне пришлось узнать о CORS.В конечном итоге проблема заключалась в том, что источник в заголовке был нулевым, потому что я работал локально.Добавление следующего кода в мою функцию ответа POST решило проблему (хотя мне нужно что-то более надежное на рабочем сервере):

ResponseBuilder builder = Response.ok("<html lang=\"en\"><body><h1>POST RESPONSE</h1></body></html>");
builder.header("Access-Control-Allow-Origin", "*");
return builder.build();
...