我有一个用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行)是我的控制台日志声明。
第2行)是POST XHR请求,它是红色的,圆圈X显示失败。
第3行)是来自onreadystatechange处理程序的控制台日志语句。
没有异常引发(我把那张支票放在那里只是为了妄想) - 即使我让open()同步而不是异步。
同样,这不是服务器端问题,因为请求甚至没有将其发送到线路上,我不知道如何找出原因。
答案 0 :(得分:2)
您域中的网址或替代域名?如果它是替代域,则您很可能因跨域安全问题而被阻止。
答案 1 :(得分:1)
感谢大家的建议!事实证明这是一个更高层次的问题。
调用save函数的代码然后立即调用window.location.reload()来查看新数据,最终取消了未完成的POST请求。
无法相信我必须通过WireShark和Stack Overflow才能看到这个问题......