【发布时间】:2019-08-13 21:28:37
【问题描述】:
我有一个函数向我的服务器发送一个简单的 AJAX 请求。浏览器的 javascript 代码如下所示:
function testRequest() {
var xhr = new XMLHttpRequest();
xhr.onload = () => {
console.log("RESPONSE RECIEVED");
console.log(this); // 'this' should be a XMLHttpRequest object
console.log(this.status);
console.log(this.responseText);
};
xhr.open('POST', `http://server_ip/test`, true);
xhr.send();
}
服务器代码如下所示(Express.js):
app.post("/test", (req, res) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.status(200).send("testing");
});
调用该函数时,我在浏览器控制台上得到的响应是这样的:
RESPONSE RECIEVED
Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
undefined
而不是预期:
RESPONSE RECIEVED
XMLHttpRequest {…}
200
"testing"
换句话说,浏览器正在接收服务器响应,但是传递给 onload 函数的对象 (this) 似乎是某个“窗口”对象,而不是 XMLHttpRequest 对象。因此,没有 status 或 responseText 变量。
在浏览器中检查请求时,响应的主体确实是预期的“测试”。
【问题讨论】:
标签: javascript ajax express http xmlhttprequest