![](/img/trans.png)
[英]Casperjs, how to only proceed after receiving response from an ajax call
[英]AJAX call not receiving a response from webserver
我看过相关的问题,没有一个对我有帮助。 因此,我正在提出这个问题。
因此,我的客户端解密URL并将其发送到我的服务器,然后由我的服务器解密并使用解密后的请求进行API调用。 在服务器端,一切似乎工作正常。 没有错误被抛出。 日志似乎很好,等等。
我的AJAX看起来像:
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);
与
res.send('hello');
我得到回应。 对这里发生的事情有什么想法吗?
函数makeExternalCall
是一个异步函数。 从回调返回不起作用,因为异步函数在返回数据之前已经返回,因此is undefined
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);
}
})
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.