$http angularjs 调用不是从带有 Worklight 的移动设备执行的



我不知道这是否真的是特定于工作灯的。 但是在ios/移动设备上,此$http调用未执行(或至少看起来不像)。

我没有达到success点或error点。 使用网络流量进行监视时,我看不到正在发出的请求。 你在这里看到问题了吗,它是工作轻的,有棱角的吗?

我正在尝试添加scope.apply并更改请求参数。 我用jquery/ajax尝试了类似的代码,但得到了类似的结果。

此外,当我在桌面浏览器(非移动)上下文中对此进行测试时,调用工作正常。 您是否看到什么可以纠正$http调用不执行?

var deferred = $q.defer();
var httplogout = function() {
    $http({
        method: 'post',
        url: 'https://server.com/logout',
        data: {},
        timeout: 8000
    }).then(function(data) {        
        deferred.resolve();
    }, function(err) {             
        deferred.reject();
    });
    return deferred.promise();
};
$timeout(function() {
    $scope.$apply(function() {
        httplogout().then(function() {        
            WL.Logger.debug('Done');
        });
    });
    }, 
1);

您正在执行跨域请求,并且可能应该使用$http.jsonp https://docs.angularjs.org/api/ng/service/$http#jsonp。您可以通过查看开发人员控制台来了解这是否是问题所在,您应该会看到与 HTTP 请求关联的跨域异常

您可以查看此页面以获取一些其他信息 http://msdn.microsoft.com/en-us/library/cc709423%28v=vs.85%29.aspx#xdomainsec_secconcernswebapiwg 但基本上,您还应该确保您的服务器设置了正确的标头以允许跨域请求和处理 JSONP 回调。

这里有一些 Node.js/Express 代码,用于在响应上设置这些标头(并处理 JSONP 回调)

function sendResponse(req, res, data) {
    res.setHeader('Access-Control-Allow-Origin', req.headers && req.headers.origin ? req.headers.origin : '*');
    res.setHeader('Access-Control-Allow-Credentials', 'true');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
    if (req.query.callback) {
        res.setHeader('Content-Type', 'text/javascript');
        var response = req.query.callback + '(' +
            JSON.stringify(data) +
            ');';
        res.send(response);
    } else {
        res.setHeader('Content-Type', 'application/json');
        res.send(data);
    }
}

你还应该实现 OPTIONS HTTP 请求(这里是一些 Node.js/Express 代码)

app.options('*',
    function(req, res) {
        sendResponse(req, res, {});
    });

最新更新