带有 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的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 AngularJS 和 PHP 发布

单击“应用”按钮后应用 angularjs 过滤器

带有 jsonp 的 AngularJS 资源服务失败

带有数据切换的引导选项卡导致 angularjs 重新加载

带有 ControllerAs 和 TypeScript 类的 AngularJs 指令

带有服务器发送事件的 AngularJS