Почему этот POST XMLHttpRequest не может даже соединиться с сервером? - PullRequest
1 голос
/ 24 марта 2011

У меня есть XMLHttpRequest, открытый методом POST, по URL, который, я знаю, существует, потому что я только что сделал GET для него.Однако вызов send () на XHR на самом деле не открывает никакого соединения с сервером и не отправляет никаких данных - я проверил это с помощью WireShark.Вместо этого он просто отказывает в запросе, вызывает обработчик события onreadystatechange, устанавливая состояние в 0 (что означает, согласно спецификации, что «флаг ошибки» установлен).

Но ... нет никакого способа длямне проверить, что происходит не так.Я пробовал это в FireBug, и заголовки и тело выглядят хорошо;нет тела ответа или заголовков ответа.Строка в выводе консоли - это POST / url (x), где (x) - красный круг с X в нем.Причина ошибки нигде не видна.Та же самая строка вообще отсутствует в панели NET.Это, вероятно, ключ, но я не знаю, что.

function save_edits(url, txt, cb)
  {
  var xhr = new XMLHttpRequest();
  console.log("'POST' " + url);
  xhr.open('POST', url, true);
  xhr.onreadystatechange = function(ev)
    {
    if (xhr.readyState == 4)
      {
      console.log('post complete status:' + xhr.status);
      cb();
      }
    }
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  var text = "&" + edit_what + "=" + escape(txt.replace(/\r/g, '\n'));
  try
    {
    xhr.send(text);
    }
  catch (e)
    {
    console.log('send() error: ' + e.toString());
    }

Это выводит в консоли FireBug:

  1. 'POST' http://mydomain.com/srv.json.section-xna.latest
  2. POST http://mydomain.com/srv.json.section-xna.latest source.js (строка 70)
  3. статус завершения сообщения: 0

Строка 1) - это мой оператор журнала консоли.

Строка 2) - это запрос POST XHR, красный, с кружком-X, указывающим на сбой.

Строка 3) - оператор журнала консоли из обработчика onreadystatechange.

НетВозникло исключение (я поставил эту проверку только для паранойи) - даже если я сделаю open () синхронным, а не асинхронным.

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

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

URL-адрес вашего домена или альтернативного домена? Если это альтернативный домен, вы, скорее всего, заблокированы из-за проблем с междоменной безопасностью.

1 голос
/ 24 марта 2011

Спасибо за предложения, всем! Оказывается, проблема на более высоком уровне.

Код, который вызывал функцию сохранения, немедленно вызывал window.location.reload (), чтобы увидеть новые данные, что в итоге отменило ожидающий запрос POST.

Не могу поверить, что мне пришлось пройти через WireShark AND Stack Overflow, чтобы увидеть эту проблему ...

...