$http angularjs 调用未从具有 Worklight 的移动设备执行
$http angularjs calls not executing from Mobile Device with Worklight
我不知道这是否真的是特定于工作灯的。但是在 ios/mobile 设备上,这个 $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 但基本上,您还应确保您的服务器具有正确的 headers 设置以允许跨域请求并处理 JSONP 回调.
这是一些 Node.js/Express 代码,用于在响应中设置这些 headers(并且还处理 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, {});
});
我不知道这是否真的是特定于工作灯的。但是在 ios/mobile 设备上,这个 $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 但基本上,您还应确保您的服务器具有正确的 headers 设置以允许跨域请求并处理 JSONP 回调.
这是一些 Node.js/Express 代码,用于在响应中设置这些 headers(并且还处理 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, {});
});