2015-10-13 181 views
0

POST请求授权,我有一些问题,授权我的应用程序。我通过工厂和控制器意识到它,发布方法发送请求,但作为响应,我从服务器登录,那个值是错误的。 但是,如果我改变doLogin功能的jQuery AJAX方法的身体和不使用的工厂,一切都OK。我的角度方式有什么问题?麻烦与角

我AngularJS代码

形式:

<form ng-submit="doLogin(credentials)"> 
    <div class="list"> 
    <label class="item item-input"> 
     <span class="input-label">Username</span> 
     <input type="text" ng-model="credentials.email"> 
    </label> 
    <label class="item item-input"> 
     <span class="input-label">Password</span> 
     <input type="password" ng-model="credentials.password"> 
    </label> 
    <label class="item"> 
     <button class="button button-block button-positive" type="submit">Log in</button> 
    </label> 
    </div> 
</form> 

厂:在控制器

.factory('Somepost', function ($http) { 
    return{ 
doPost: function (credentials, callback) { 
    console.log('service'); 
    console.log(credentials); 
    return $http({ 
    url:'http://cronicls.ru/auth/login', 
    method: 'POST', 
    data: credentials, 
    async : true 
    }).success(callback); 
}}}) 

登录功能:

$scope.doLogin = function(credentials) { 
    var successCallback = function (data) { 
    console.log(data); 
    } 
    Somepost.doPost(credentials, function(data) { 
    console.log(data); 
    }); 
}; 

与阿贾克斯$(工作全成功能doLogin y):

$scope.doLogin = function(credentials) { 
    var successCallback = function (data) { 
    console.log(data); 
    } 
    var login = function(credentials, successCallback) { 
    $.ajax({ 
     type: "POST", 
     url: 'http://cronicls.ru/auth/login', 
     async : true, 
     data: credentials, 
     success: function(data){ 
     console.log('login success'); 
     console.log(data); 
     successCallback(); 
     }, 
     error: function(data){ 
     console.log('/auth/login: error'); 
     console.log(data); 
     } 
    }); 
    }; 
    login(credentials, successCallback); 
}; 
+0

您是否使用PHP? –

+0

你能提供两种不同的服务器响应吗?我们不知道你所称的“错误回应”。如果你提供HTTP调用,那也是很好的。只需在两个通话中发布哪些数据,我们就可以比较通话和回复。对我来说,你的代码一切都可以。 – vinagreti

+0

@MarcoAurélioDeleu肯定。这是PHP与服务器端的ZF。 – whois42

回答

0

,我发现我的问题的答案。感谢@Jai提示ZF。实际上,我们需要将数据包装在$ .param()中。因此,工厂的工作是:

.factory('Somepost', function ($http) { 
    return{ 
    doPost: function (credentials, callback) { 
     return $http({ 
     url:'http://cronicls.ru/auth/login', 
     method: 'POST', 
     data: $.param(credentials), 
     headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
    }).then(callback); 
    } 
    } 
}) 
1

但在响应我有来自服务器的日志,该值是错误的。

其实不是,因为它返回一个承诺,你必须做这样的事情在你的回调:

按您的评论:

它是在服务器端PHP与ZF。其实你需要从application/json默认的内容类型标题更改为application/x-www-form-urlencoded

变化工厂:

.factory('Somepost', function ($http) { 
    return{ 
    doPost: function (credentials, callback) { 
    console.log('service'); 
    console.log(credentials); 
    return $http({ 
     url:'http://cronicls.ru/auth/login', 
     method: 'POST', 
     data: credentials, 
     headers: {'Content-Type': 'application/x-www-form-urlencoded'}, // <-- override the default contentType header 
     async : true 
    }).then(callback); // change to then instead of success 
}}}) 
+0

我想办法,你提供的,但它不是工作压力太大。谢谢 – whois42

+0

您的评论_It是PHP与服务器端的ZF。_实际上你需要改变你的代码来接受发布的数据,使用'php:// inputs'或者你必须覆盖'http'请求中的头文件来使用'form-url-encoded'格式代替'application/json'是默认的头部设置角度。 – Jai

+0

@ whois42检查编辑。 – Jai