2016-09-08 10 views
0

を取得するために私は自分のコードをより再利用可能にするためにしようとしていますが、$http呼び出しを行う際に問題に遭遇してきた、私は私の通常の方法を使用する場合:

vm.loginUser = function() { 
    var userData = { 
    username: vm.userName, 
    password: vm.userPassword, 
    grant_type: "password", 
    client_id: "E0..." 
    }; 
    console.log('userData: ', userData); 
    var config = { 
    headers: {"Content-Type": "application/x-www-form-urlencoded"}, 
    transformRequest: function (data) { 
     var str = []; 
     for (var d in data) 
     if (data.hasOwnProperty(d)) str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d])); 
     return str.join("&"); 
    } 
    }; 
    console.log('config: ', config); 
    $http.post('https://a.n.org.uk/token', userData, config) 
    .then(function (response) { 
     console.log('Button clicked: ', response); 
    }, function (response) { 
     console.log(response.data.error_description); 
    }, function (response) { 
     console.log(response.data); 
    }); 

をこれが正常に動作し、私に何の問題も与えません。私はfactoryを作りましたが、それは基本的には同じですが、コンソールでエラーOPTIONSとエラーが出るようには見えません。preflight check... No 'Access-Control-Allow-Origin' header'私はこれが単純な修正かどうか疑問に思っています。私Ctrl page

factory("homeResource", function ($http, $q) { 
    return { 
    getUser: getUser 
    }; 

    function getUser(userData) { 
    var request = $http({ 
     method: "post", 
     url: "https://a.n.org.uk/token", 
     data: userData, 
     config: { 
     headers: {"Content-Type": "application/x-www-form-urlencoded"}, 
     transformRequest: function (data) { 
      var str = []; 
      for (var d in data) 
      if (data.hasOwnProperty(d)) str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d])); 
      return str.join("&"); 
     } 
     } 
    }); 

    return (request.then(handleSuccess, handleError)); 
    } 

    function handleSuccess(response) { 
    return (response.data); 
    } 

は、私は私のhomeResourceに渡すので、homeResource.getUser(userData).then(function (res) {console.log(res);});のようにそれを呼び出すと述べたエラーが発生します。この仕事をする方法はありますか?

+0

どのようなエラーが表示されますか(コンソールを確認してください)? –

答えて

1

は、以下のファクトリメソッド

app.factory('homeResource', function($http) { 
     return { 
      getUser: function(userData) { 
      var config = { 
       headers: {"Content-Type": "application/x-www-form-urlencoded"}, 
       transformRequest: function (data) { 
        var str = []; 
        for (var d in data) 
         if (data.hasOwnProperty(d)) 
          str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d])); 
        return str.join("&"); 
       } 
      }; 
      return $http.post('https://a.n.org.uk/token', userData, config); 
      } 
     } 
    }); 

と、このようなあなたのコントローラでそれを使用してみてください。

app.controller('AppCtrl',function($scope, homeResource){ 
    vm.loginUser = function() { 
     var userData = { 
     username: vm.userName, 
     password: vm.userPassword, 
     grant_type: "password", 
     client_id: "E0..." 
     }; 
    homeResource.getUser(userData).success(function(res){ 
     console.log("response is",res); 
    }) 
    .error(function(err) { 
     console.log("err is",err); 
    }); 
    } 
}) 
0

クロスオリジン要求に関連するエラー - 別のドメインまたは特定のルートにリクエストを送信すると、Access-Control-Allow-Originサーバのヘッダーになります。

ポート、http/https、およびドメインを確認します。あなたのリファクタには関係していないようです。

関連する問題