2015-04-22 6 views
9

Ho creato un'app con Phonegap Cordova e quando eseguo il test su Android tutto è OK, ma quando eseguo il test su Windows Phone 8.1 mi dà il seguente errore:PhoneGap su Windows Phone 8.1 con AngularJS non può recuperare JSONP dalla mia API

APPHOST9601: Can’t load http://www.example.com/apiv2/process.php/[email protected]&Password=7c4a8d09ca3762af61e59520943dc26494f8941b&callback=angular.callbacks._0 . An app can’t load remote web content in the local context. File: index.html. I am using Angularjs and Onsenui.

Modificato:

Il codice è:

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(); 

       } 

      } 
     ); 


     } 

    }; 

    }]); 
+0

Sembra che si stia utilizzando un metodo che viola le restrizioni di sicurezza per i dispositivi Windows 8.1. Puoi elencare il codice che stai eseguendo che sta causando questo errore per la revisione? – Claies

+0

questo sembra un problema CORS –

+0

Sicuramente un problema CORS. È necessario aggiungere intestazioni per Cross Origin Resource Sharing (CORS). http://en.wikipedia.org/wiki/Cross-origin_resource_sharing – Claies

risposta

0

in primo luogo, provare a rimuovere codice inutile per una domanda più leggibile.

tuo URL dovrebbe assomigliare a questa

$http.jsonp(apiprincipal+'Login2?Email='+$scope.email+'&Password='+CryptoJS.SHA1($scope.password)+'&_jsonp=JSON_CALLBACK') 

nel caso in cui &_jsonp=JSON_CALLBACK non funziona, cambiare per ?_jsonp=JSON_CALLBACK

ero con la stessa nella mia app e ieri stavo leggendo un articolo, così ho risolto il problema in questo modo:

http://amyurl.com/wp-json/posts?_jsonp=JSON_CALLBACK 

ora funziona.

+0

Questa soluzione non ha funzionato per me, ho dovuto cambiare la mia chiamata JSONP a una chiamata GET come '$ http.get (...' – Ben

-1

Ho riscontrato lo stesso problema durante il targeting di Windows 8.1.

Per prima cosa ho controllato i CORS supportati dal back-end. Non ho trovato un modo per mantenere JSONP in Windows 8.1, ho dovuto cambiarlo in un semplice metodo GET. Quindi ho rimosso la "richiamata" dall'URL.

riferimento al codice, che dovrebbe essere simile che

$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(); 
    } 
}); 

Ha funzionato bene per me, spero che possa aiutare qualcun altro.