Javascript 对Express服务器的AJAX请求不';我什么也不寄

Javascript 对Express服务器的AJAX请求不';我什么也不寄,javascript,node.js,ajax,express,xmlhttprequest,Javascript,Node.js,Ajax,Express,Xmlhttprequest,因此,我创建了一个To Do应用程序,当您在字段中输入某些内容时,它应该向Express服务器发出AJAX请求,请求输入数据,然后Express服务器(POST)将数据推送到数组(项),最后EJS将其呈现出来(通过使用ForEach并获取内部每个对象的项属性) 现在的问题是,每当我提交它时,它似乎根本没有发送任何东西,req.body是空的,我附加到XHR请求的事件只显示3个事件: onprogress XMLHttpRequest { onreadystatechange: null, rea

因此,我创建了一个
To Do
应用程序,当您在字段中输入某些内容时,它应该向
Express
服务器发出
AJAX请求,请求输入数据,然后
Express
服务器(
POST
)将数据推送到数组(
),最后
EJS
将其呈现出来(通过使用
ForEach
并获取内部每个
对象的
项属性

现在的问题是,每当我提交它时,它似乎根本没有发送任何东西,
req.body
是空的,我附加到
XHR请求的事件
只显示3个
事件

onprogress

XMLHttpRequest { onreadystatechange: null, readyState: 2, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
XMLHttpRequest { onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
XMLHttpRequest { onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
onerror

XMLHttpRequest { onreadystatechange: null, readyState: 2, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
XMLHttpRequest { onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
XMLHttpRequest { onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
onloadend

XMLHttpRequest { onreadystatechange: null, readyState: 2, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
XMLHttpRequest { onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
XMLHttpRequest { onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://localhost:3000/todo", status: 0, statusText: "", responseType: "", response: "" }
正如您所看到的,
readyState
是4,但是
statusText、status、responseType、response
没有显示任何内容。status是0,其他的都是空的。怎么了?我尝试使用
Fetch API
但它不起作用……我也不明白问题出在哪里,尽管我确信问题出在
AJAX
req中是的,但我想不出来

这是
HTML
文件(使用
EJS
作为查看引擎):

这是POST/Delete/GET请求(重要请求)的服务器设置:

Req.body
{}
最后这是Javascript文件,我使用它通过POST方法向服务器发出AJAX请求:

let form = document.querySelector("form");

let valueToAdd = document.querySelector("input").value;
let readyValue = { item: valueToAdd };
let request = new XMLHttpRequest();
request.open("POST", "/todo", true);
request.send(readyValue);
form.addEventListener(
  "submit",
  function() {
    request.onabort = function() {
      console.log("onabort ", request);
    };
    request.onerror = function() {
      console.log("onerror ", request);
    };
    request.onload = function() {
      console.log("onload ", request);
    };
    request.onloadend = function() {
      console.log("onloadend ", request);
    };
    request.onloadstart = function() {
      console.log("onloadstart ", request);
    };
    request.onprogress = function() {
      console.log("onprogress ", request);
    };
    request.ontimeout = function() {
      console.log("ontimeout ", request);
    };
  },
  true
);
如果我不够清楚,请告诉我。

我找到了解决方案


问题在于表单的奇怪行为。通过使用“
onsumbit=return false
”它将其禁用,并让请求工作。问题得到了解决。

尝试使用
JSON.stringify(readyValue)字符串化readyValue
这样你就可以发布一个JSON字符串而不是javascript对象。@Shilly是的,我以前做过。它不起作用并且显示相同的结果。是什么函数触发了这个AJAX请求?如果你在表单中使用submit按钮,你可能需要阻止默认行为,以便该函数在页面刷新之前运行。那么你可以更多关于AJAX调用是如何触发的上下文?@Shilly它不是一个提交按钮。它是一个普通按钮,因此不需要阻止默认行为。此外,表单上没有“方法:Post,Action”,因此我认为它不会刷新(尽管浏览器中的页面旋转),AJAX调用是在提交时触发的(事件侦听器)可以添加该事件侦听器的代码吗?我假设显示的客户端JS代码在函数中,因为form.onsubmit不包含request.send()部分。或者这就是所有的客户端代码吗?在这种情况下,你在加载时提交表单,而不是单击按钮,这将解释为什么没有发送值。很高兴你让它工作了!你所说的基本上是阻止表单的默认行为。我问过,你说这不是问题,所以我没有沿着那个方向走。难怪我们找不到问题。:)是的,很抱歉。我认为如果没有操作/方法,表单将不会有任何默认行为。谢谢你早些时候帮助我。