Javascript 对Express应用程序的Ajax调用不传递数据
我正在使用React和Express构建一个应用程序。从React组件中,我调用了一个针对某个Express route的ajax函数。但是,我的路由处理程序不接收随Ajax请求传递的数据 我的Express应用程序(出于测试目的,我将特定路线放在主app.js中): 我的Ajax函数(调用时reqData为{id:this.props.id}): 我知道bodyParser正在工作,因为路由处理程序中的console.log将{}打印到服务器端控制台,指示req.body为空 我已经尝试过将reqData传递到xhr.send,有JSON和没有JSON.stringify,两者都不起作用。但是json可以完美地打印到浏览器控制台Javascript 对Express应用程序的Ajax调用不传递数据,javascript,json,ajax,reactjs,express,Javascript,Json,Ajax,Reactjs,Express,我正在使用React和Express构建一个应用程序。从React组件中,我调用了一个针对某个Express route的ajax函数。但是,我的路由处理程序不接收随Ajax请求传递的数据 我的Express应用程序(出于测试目的,我将特定路线放在主app.js中): 我的Ajax函数(调用时reqData为{id:this.props.id}): 我知道bodyParser正在工作,因为路由处理程序中的console.log将{}打印到服务器端控制台,指示req.body为空 我已经尝试过将r
我完全不知道我的要求要到哪里去。我是否从根本上误解了xhr.send和Express routes是如何交互的?为什么不尝试使用某种ajax库,如:好的,现在我想我知道问题出在哪里了-这是您在xhr中使用的方法:
xhr.open(method, url);
如果使用GET,则不会有请求主体。如果使用POST,则处理程序位于/routes/list
中的某个位置
假设您只在提供的代码段中执行console.log
,那么实际使用的是GET。根据:
XMLHttpRequest.send()方法发送请求。[…]send()接受
请求正文的可选参数。如果请求方法是GET
或HEAD,则忽略该参数,并将请求正文设置为null
一点挑剔:在
app.get('/lists/show'.
)中不需要第二个bodyParser.json()
,因为您已经在app.use(bodyParser.json())中全局使用了它
。虽然我不希望它会把事情搞砸。哈哈,是的,我一开始没有,我在调试时添加了它,看看它是否有影响,但忘了把它取出来。首先,我认为我的代码是完全可以接受的,我想知道它为什么不起作用。将来我可能会用一个。谢谢!这看起来肯定是正确的,我会的我回家后会测试它。所以如果我想在请求中传递参数,如果我想使用get,我必须在URI中传递它?如果我想使用req.body,我必须使用POST请求?我所要做的就是返回一个与我传递的ID对应的数据库文档,所以我假设get会更好?是的,没错。从语义上说,POST用于创建或处理某些内容(提交表单、撰写帖子等),GET用于检索。您可以使用其他模块,如querystring
或Express中的参数化路由,从GET请求中的URI提取数据。
export default function(reqData, path, method, onSuccess, onError, onComplete) {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
if(onSuccess) onSuccess(xhr.responseText != '' ? JSON.parse(xhr.responseText) : '');
} else {
if(onError && xhr.responseText != '') {
let data = JSON.parse(xhr.responseText);
if(data.ExceptionMessage) onError(data.ExceptionMessage);
}
}
}
};
let url = window.location.href.replace('#', '') + path;
xhr.open(method, url);
xhr.setRequestHeader('Content-Type', 'application/json');
console.log(JSON.stringify(reqData));
xhr.send(JSON.stringify(reqData));
return xhr;
}
xhr.open(method, url);