繁体   English   中英

AJAX呼叫未收到来自网络服务器的响应

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM