为什么这个XMLHttpRequest POST甚至无法连接到服务器?

时间:2011-03-24 04:54:32

标签: javascript ajax firebug xmlhttprequest

我有一个用POST方法打开的XMLHttpRequest到我知道存在的URL,因为我刚刚对它进行了GET。 但是,XHR上的send()调用实际上并没有打开与服务器的任何连接或发送任何数据 - 我已经用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
  4. 第1行)是我的控制台日志声明。

    第2行)是POST XHR请求,它是红色的,圆圈X显示失败。

    第3行)是来自onreadystatechange处理程序的控制台日志语句。

    没有异常引发(我把那张支票放在那里只是为了妄想) - 即使我让open()同步而不是异步。

    同样,这不是服务器端问题,因为请求甚至没有将其发送到线路上,我不知道如何找出原因。

2 个答案:

答案 0 :(得分:2)

您域中的网址或替代域名?如果它是替代域,则您很可能因跨域安全问题而被阻止。

答案 1 :(得分:1)

感谢大家的建议!事实证明这是一个更高层次的问题。

调用save函数的代码然后立即调用window.location.reload()来查看新数据,最终取消了未完成的POST请求。

无法相信我必须通过WireShark和Stack Overflow才能看到这个问题......