2016-01-28 2 views
3

Update - 2016-01-30JQuery xhr.status возвращает 0 при отправке запроса на локальный

Как сообщили в комментариях у меня есть:

  1. установлен XAMPP
  2. положил мою страницу на Apache и запустил сервер
  3. удостоверился, что страница и скрипты выполняются (простой тестовый тест)
  4. установить xhrFields: withCredentials на false, чтобы сделать CO Запрос RS, как указано в единственном ответе и преподаваемом here

Я все еще не могу передать запрос. Это журнал консоль:

XMLHttpRequest cannot load http://localhost:8080/RimmaNew/rest/appointments. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 400 

Вот как это выглядит на «конечный пользователь», если это какая-либо помощи: enter image description here

-------------- ---- Начальный билет -----------------------------

У меня есть приложение для отдыха java, которое выполняется локально и принимает до сих пор можно получить метод и возвращает строку json: Successful get by id call

Другим методом является POST, что есть предположение ed для преобразования, проверки и сохранения информации из отправленной формы и возврата 200 ответов. Если что-то пойдет не так во время преобразования, проверки или сохранения - исключение вызывается (например, BadRequest или 500).

Это метод остальные (я для краткости опущены проверки, построить методы, а также преобразователя и поставщика преобразователя классы):

@POST 
@Produces("application/json") 
@Consumes("application/x-www-form-urlencoded") 
public Response bookAppointment(@FormParam("date") Date appDate, 
     @FormParam("time") Time appTime, @FormParam("type") String appType, 
     @FormParam("clientName") String clientName, @FormParam("email") String clientEmail, 
     @DefaultValue("") @FormParam("message") String clientMsg) { 
    //externalize the validation of all fields to concentrate on "positive" 
    //scenario only 
    validator(appDate, appTime, appType, clientName, clientEmail); 
    Appointment appointment = build(appDate, appTime, appType,clientName, 
       clientEmail, clientMsg); 
    try { 
     repository.add(appointment); 
     return Response.ok(appointment).build(); 
    } catch (Exception e) { 
     throw new InternalServerErrorException("Something happened in the application " 
       + "and this apointment could not get saved. Please contact us " 
       + "to inform us of this issue."); 
    } 
} 

Клиент не внутри приложения (я подумал, может быть это будет быть полезным) - это простой HTML-файл на компьютере, который имеет этот скрипт JQuery:

<script type='text/javascript'> 
    $(document).ready(function(){ 
     $('form#appointmentForm').submit(function(ev){ 
      ev.preventDefault(); 
      $.ajax({ 
       url: 'localhost:8080/RimmaNew/rest/appointments', 
       type: 'post', 
       dataType: 'json', 
       data: $('form#appointmentForm').serialize(), 
       contentType: 'application/x-www-form-urlencoded', 
       beforeSend: function() {       
        $('#ajaxResponse').html("<img src='245.gif' />");       
       }, 
       success: function(data) { 
        $('#ajaxResponse').html("<span style='color:white; background-color: green;' class='glyphicon glyphicon-ok'></span><p>"+JSON.stringify(data)+"</p>") 
        .fadeIn("slow"); 
       }, 
       error: function(xhr, ajaxOptions, thrownError){ 
        $('#ajaxResponse').html("<span style='color:white; background-color: red;' class='glyphicon glyphicon-exclamation-sign'></span><p>Status: ").append(xhr.status) 
        .append("</p>").fadeIn("slow"); 
       } 
      });    
     });    
    }); 
</script> 

Я хочу представить форму, чтобы получить доступ к его Params с @FormParam аннотированных атрибутами. При каждом запросе, который я отправляю, я не получаю ни одной из брошенных ошибок, и статус всегда равен 0. Вы видите, где я заблуждаюсь или что мне не хватает?

enter image description here

+0

Что вы подразумеваете под *»... клиент не внутри приложение - это простой HTML-файл на моем компьютере, который имеет этот сценарий jQuery "*, ajax не удается из-за того же происхождения, если вы используете этот скрипт из протокола' file: // '. – adeneo

+0

Это файл html, не установленный на любой сервер приложений. Этот файл просто находится в/home/myusername/subdir1/subdir2/RimmaNew/ Вы говорите, что я не могу использовать jQuery вот так? Есть ли работа? – vasigorc

+0

Вы можете использовать jQuery, но если этот .html-файл не обслуживается с реального веб-сервера с помощью протокола http, вы нарушаете политику одного и того же происхождения и не можете делать ajax, как протоколы, порты и домены должен совпадать. – adeneo

ответ

0

Код состояния 0 означает, что запрос не произошло. Чтобы иметь код состояния, должно произойти действительное взаимодействие с http, если не было никакого кода состояния.

Основных причин, почему это произошло бы, является:

  1. DNS-не может быть решен
  2. о соединении с хостом/портом не может быть установлен
  3. CORS вопросов, то HTML не является обслуживается одним и тем же хостом/портом, чем сервер. В этом случае вам нужно написать политику CORS, чтобы разрешить определенным доменам сделать запрос ajax на сервер.
  4. HTML - это локальный файл, это частный случай проблемы CORS, когда какой-либо браузер не разрешает соединения без хоста.

Все они должны показать ошибку на консоли JavaScript (странная будет CO, который показывает себя как запрос неудачной OPTIONS)

+0

Не обращайте внимания на комментарии, просто отправляйте случайный общий ответ. – adeneo

+0

Coudn't помочь себе пришлось добавить настоящую причину вашего конкретного случая –

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