Javascript AJAX调用未收到来自Web服务器的响应
我看过相关的问题,但没有一个对我有帮助。因此,我提出了这个问题 因此,我的客户端解密URL并将其发送到我的服务器,然后服务器解密URL并使用解密的请求进行API调用。在服务器端,一切似乎都很正常。没有抛出任何错误。原木看起来不错等等 我的AJAX看起来像:Javascript AJAX调用未收到来自Web服务器的响应,javascript,ajax,node.js,Javascript,Ajax,Node.js,我看过相关的问题,但没有一个对我有帮助。因此,我提出了这个问题 因此,我的客户端解密URL并将其发送到我的服务器,然后服务器解密URL并使用解密的请求进行API调用。在服务器端,一切似乎都很正常。没有抛出任何错误。原木看起来不错等等 我的AJAX看起来像: var handleRequest = function(request){ $.ajax({ type: "GET", url: host + '/requests?call=' + request,
var handleRequest = function(request){
$.ajax({
type: "GET",
url: host + '/requests?call=' + request,
success: function(data) {
var rawJSON = JSON.stringify(data, null, 2);
console.log('Recieved: ' + rawJSON);
editor.setValue(rawJSON);
},
error: function(jqXHR, responseText,status){
console.log(jqXHR.responseText)
},
dataType: 'jsonp'
});
}
服务器端:
app.get('/requests', function(req, res) {
var call = req.query.call;
var decryptedRequest = decryptRequest(call);
console.log("Recieved: " + decryptedRequest);
var rawJson = retriever.makeExternalCall(decryptedRequest);
console.log('Sending response to client');
res.setHeader('Content-Type', 'application/json');
res.send(rawJson);
});
上述方法:
var requestService = require('request');
module.exports = {
makeExternalCall: function(url) {
console.log('Making call to: ' + url);
requestService(url, function(error, response, body){
console.log(body);
return body;
});
}
}
奇怪的是当我替换
res.send(rawJson);
与
我得到了答复。有什么想法吗?函数
makeExternalCall
是一个异步函数。从回调返回不起作用,因为异步函数在返回数据之前已经返回,因此rawJson
未定义
解决方法是正确使用回调函数
var requestService = require('request');
module.exports = {
makeExternalCall: function(url,callback) {
console.log('Making call to: ' + url);
requestService(url, callback);
}
}
然后在API处理程序中
app.get('/requests', function(req, res) {
var call = req.query.call;
var decryptedRequest = decryptRequest(call);
console.log("Recieved: " + decryptedRequest);
retriever.makeExternalCall(decryptedRequest, function(error, response, body) {
if (error) {
res.send("error message");
} else {
res.setHeader('Content-Type', 'application/json');
res.send(body);
}
})
});
makeExternalCall
函数不返回任何内容。这意味着rawJson
未定义。这是一个非常常见的问题:Hmmm的可能重复,这是我已经解决过的一个问题,尽管我提到了@ChrisG。我不是函数式编程出身,所以这是我的新手错误。我想我可以直接返回函数?(解决方案是将res.send()
移动到当前具有返回正文的位置;
)在请求处理程序中发送响应不是一种好做法吗。i、 e.应用程序获取(…)?
app.get('/requests', function(req, res) {
var call = req.query.call;
var decryptedRequest = decryptRequest(call);
console.log("Recieved: " + decryptedRequest);
retriever.makeExternalCall(decryptedRequest, function(error, response, body) {
if (error) {
res.send("error message");
} else {
res.setHeader('Content-Type', 'application/json');
res.send(body);
}
})
});