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