NetworkError: Не удалось выполнить 'send' on 'XMLHttpRequest'

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

error: NetworkError: не удалось выполнить 'send' on 'XMLHttpRequest': не удалось загрузить 'http://comp-ip'.

var param = JSON.stringify({varA:"varA",varB:"varB"});

$.ajax({
  type: "POST", 
  url: "http://comp-ip",
  async: false, 
  data: param,
  success: function(result, status, xhr){
    alert(result + ": " + status);
  },
  error: function(xhr, status, err) {
    alert(status + ": " + err);
  }
});

Кажется, каждый раз срабатывает ошибка, а не "успех". Кто-нибудь знает, что не так?

Изменить: я попытался отправить обычный запрос POST без AJAX, и он также выдает мне ошибку 'undefined:

$(document).ready(function(){
    var param = JSON.stringify({varA:"varA",varB:"varB"});
     $("#btn").click(function(event){
           $.post( 
              "http://ip",
               param,
               function(data) {
                 $('#container').html(data);
               }
           ).fail(function(error) { alert(error.responseJSON) });
        });
});

Другие вещи, которые я пробовал: 1) Изменение браузеров в Safari (то же самое, сервер возвращает информацию, но сайт получает сообщение об ошибке) 2) Установка async = true из false. По какой-то причине, когда я установил его в true, сервер не отвечает вообще. Когда он ошибочно, сервер отвечает.

Ответ 1

У меня была эта проблема буквально несколько минут назад. Проблема в том, что вам нужно установить async:false в async:true. Я не уверен, почему это работает, я думаю, потому что HTML5 новее, чем XML.

Ошибка на этом сайте немного отличается, но я думаю, что она похожа: JavaScript console.log вызывает ошибку: &" Синхронный XMLHttpRequest в основном потоке устарел... "

Update

Привет, я вернулся с новой и улучшенной информацией. Cross-Origin происходит с портами, а также с доменами/IP-адресами и, вероятно, будет работать с большинством достойных браузеров. Если вы хотите узнать, что происходит, попробуйте изменить IP на localhost или наоборот (если вы используете localhost). Имейте в виду, что эта проблема может возникать при использовании разных портов. Для быстрого исправления убедитесь, что в заголовках, независимо от того, какой серверный сервер является то, что вы выставляете правильный заголовок Access-Control response.addHeader("Access-Control-Allow-Origin", "*");.

Код получен из этого вопроса

Ответ 2

Это проблема ресурса Cross Origin Resource (CORS). Мой сервер возвращал мне правильную информацию, но мой браузер отказался принять ее. Чтобы исправить это, мне пришлось добавить 2 строки на моем java-сервере (а не на моем сайте), чтобы установить их как заголовок ответа:

yourownvariable.setHeader("Access-Control-Allow-Origin:", "origin url of your site");
yourownvariable.setHeader("Access-Control-Allow-Methods", "GET, POST,PUT");

Ответ 3

У меня была такая же проблема, с идентичным сообщением об ошибке. В моем случае это было вызвано тем, что сервер установил заголовок Feature-Policy с sync-xhr: none. Удаление этой директивы устранило проблему.

Ответ 4

Вы можете протестировать свои веб-страницы с помощью Chrome в Windows, например,

chrome.exe --allow-file-access-from-files