【发布时间】:2011-03-24 04:54:31
【问题描述】:
我有一个使用 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 控制台中的输出:
- 'POST'http://mydomain.com/srv.json.section-xna.latest
- POST http://mydomain.com/srv.json.section-xna.latestsource.js(第 70 行)
- 发布完成状态:0
第 1 行)是我的控制台日志语句。
第 2 行)是 POST XHR 请求,红色,圆圈-X 表示失败。
第 3 行)是来自 onreadystatechange 处理程序的控制台日志语句。
没有引发异常(我将检查放在那里只是为了偏执)——即使我让 open() 是同步的而不是异步的。
再次强调,这不是服务器端问题,因为请求甚至没有发送到网络上,我不知道如何弄清楚为什么会这样。
【问题讨论】:
-
为什么不使用 jquery 来处理 ajax 请求?它更干净整洁
-
我没有在这里使用 jQuery,因为我不想。我将它用于许多其他事情。
-
我也有类似的问题。 DevTools 控制台确认已加载 POST 请求。我通过
$_SESSION存储调试消息,以便稍后打印它们,而我实际看到的是json_encode($_POST)是[]。打开请求并设置标题后,我正在做xmlReq.send("query=k");。有什么想法吗?
标签: javascript ajax firebug xmlhttprequest