带有 AngularJS 的 Windows Phone 8.1 上的 Phonegap 无法从我的 API 中检索 JSONP
Posted
技术标签:
【中文标题】带有 AngularJS 的 Windows Phone 8.1 上的 Phonegap 无法从我的 API 中检索 JSONP【英文标题】:Phonegap on Windows Phone 8.1 with AngularJS can't retrieve JSONP from my API 【发布时间】:2015-06-29 10:08:33 【问题描述】:我用 Phonegap Cordova 制作了一个应用程序,当我在 android 上测试它时一切正常,但是当我在 Windows Phone 8.1 上测试它时,它给了我以下错误:
APPHOST9601:无法加载 http://www.example.com/apiv2/process.php/Login2?Email=xxxx@xxxx.com&Password=7c4a8d09ca3762af61e59520943dc26494f8941b&callback=angular.callbacks._0。应用程序无法在本地上下文中加载远程 Web 内容。文件:index.html。我正在使用 Angularjs 和 Onsenui。
已编辑:
代码是:
var apiprincipal = 'http://www.example.com/apiv2/process.php/';
// Log In Controller
app.controller('loginController', [ '$http', '$scope', '$rootScope', function($http, $scope, $rootScope)
$scope.email = '';
$scope.password = '';
$scope.loginN = function()
if($scope.email==='' && $scope.password==='')
ons.notification.alert(message: "Vo\u00E7\u00EA dever\u00E1 preencer os dois campos usu\u00E1rio e senha");
else
modal.show();
$http.jsonp(apiprincipal+'Login2?Email='+$scope.email+'&Password='+CryptoJS.SHA1($scope.password)+'&callback=JSON_CALLBACK').success(
function(response)
if(response.status=='ok')
console.log('WORKING')
else
modal.hide();
);
;
]);
【问题讨论】:
您使用的方法似乎违反了 Windows 8.1 设备的安全限制。您能否列出您正在执行的导致此错误的代码以供审核? 这似乎是一个 CORS 问题 绝对是 CORS 问题。您需要为跨域资源共享 (CORS) 添加标头。 en.wikipedia.org/wiki/Cross-origin_resource_sharing 但是我的配置应用文件中有 ,怎么了?如果我使用 android 运行该应用程序,该应用程序的工作就像一个魅力,但如果我构建到 Windows 手机会给出该错误。 你没有列出显示这个的代码。 【参考方案1】:首先,尝试删除一些不必要的代码以获得更易读的问题。
您的网址应如下所示
$http.jsonp(apiprincipal+'Login2?Email='+$scope.email+'&Password='+CryptoJS.SHA1($scope.password)+'&_jsonp=JSON_CALLBACK')
如果&_jsonp=JSON_CALLBACK
不起作用,请将其更改为?_jsonp=JSON_CALLBACK
我在我的应用程序中遇到了同样的问题,昨天我正在阅读一篇文章,所以我这样修复它:
http://amyurl.com/wp-json/posts?_jsonp=JSON_CALLBACK
现在它正在工作。
【讨论】:
这个解决方案对我不起作用,我不得不将我的 JSONP 调用更改为像$http.get(...
这样的 GET 调用【参考方案2】:
我在面向 Windows 8.1 时遇到了同样的问题。
首先我检查了我的后端支持的 CORS。我没有找到在 Windows 8.1 中保留 JSONP 的方法,我不得不将其更改为简单的 GET 方法。然后我从 URL 中删除了“回调”。
参考你的代码,应该是这样的
$http.get(apiprincipal+'Login2?Email='+$scope.email+'&Password='+CryptoJS.SHA1($scope.password)).success(function(response)
if(response.status=='ok')
console.log('WORKING');
else
modal.hide();
);
它对我来说很好,希望它可以帮助其他人。
【讨论】:
以上是关于带有 AngularJS 的 Windows Phone 8.1 上的 Phonegap 无法从我的 API 中检索 JSONP的主要内容,如果未能解决你的问题,请参考以下文章