我在向我的快递应用程序发出POST请求时遇到了一个奇怪的问题。
我已经使用http://plnkr.co/edit/7FC8IUvdR3wPevrd48yt?p=preview测试了API但是当我从Postman复制请求代码时,AJAX或XHR请求失败,快递应用程序返回一个未定义的快递体。
网站上的控制台吐出以下内容:
Resource interpreted as Document but transferred with MIME type application/json
请求看起来像这样(AJAX):
var settings = {
"async": true,
"crossDomain": true,
"url": "https://thedomainhere.com/hello",
"method": "POST",
"headers": {
"content-type": "application/json",
"cache-control": "no-cache",
"postman-token": "0158785a-7ff5-f6a3-54ba-8dfc152976fc"
},
"data": {
"senderEmail": "hello@hello.com"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
为什么这会在Postman和控制台中使用Curl,但不能在Web文档中使用?
答案 0 :(得分:0)
当你尝试制作跨源的ajax时,jQuery首先发出没有POST有效负载的OPTIONS请求,并期望在响应中发送以下头:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
要在Express中设置响应标头,您可以在开头的某处执行以下中间件(另请参阅setHeader
的NodeJS docs:
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
if(req.method == 'OPTIONS') {
res.end();
} else {
next();
}
});
关于在快递上启用CORS的this帖子也可能有用。
要了解在这种情况下发送OPTIONS的原因,您可以阅读this问题的答案。
这是第一个可能的原因,为什么你会空虚。
还尝试将content-type
更改为contentType
(如jQuery docs中所示)并在数据中传递字符串
data: JSON.stringify({
"senderEmail": "hello@hello.com"
})
答案 1 :(得分:0)
您应该像这样将响应类型设置为text / html,例如:
>>> import numpy
>>> yvalues = integrand(numpy.linspace(0,numpy.pi/2,361), 60)
>>> print(numpy.linspace(0,numpy.pi/2,17))
[ 0. 0.09817477 0.19634954 0.29452431 0.39269908 0.49087385
0.58904862 0.68722339 0.78539816 0.88357293 0.9817477 1.07992247
1.17809725 1.27627202 1.37444679 1.47262156 1.57079633]]