我是angularjs的新手。我通过发送请求将用户凭据(即用户名和密码)发送到服务器(用php编写),我做了一个简单的应用来测试身份验证,但奇怪的是,从服务器我无法使用$ _POST获取数据而是我可以检索它通过$ _GET。我已经检查了其他部分,如CORS,发现没有错误。指南将不胜感激。感谢。
这是我的角度工厂方法:
app.factory("loginFact", function($http){
this.user = {
isAuthenticated: false,
name: "",
token: ""
}
this.makeLoginRequest = function(user,pass) {
var req = {
method: 'post',
url: 'http://localhost/login/authenticate.php',
headers: {
'Content-Type': "multipart/form-data"
},
params: { username: user, password:pass }
}
$http( req ).success(function(data){
console.log( "Success: " + data )
}).error(function (data) {
console.log( "Error: " + data )
});
}
return{
makeLoginRequest: this.makeLoginRequest
}
});
以下是我的服务器部分:
<?php
header('Accept-Charset: utf-8');
header('Connection: keep-alive');
header('Content-Type: multipart/form-data,');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header('Access-Control-Allow-Headers: accept, content-type');
header('Access-Control-Request-Headers: X-Requested-With, accept, content-type');
try{
if(($_POST["username"] == "test") && ($_POST["password"] == "test") ){
echo "{\"id\": \"700\", \"user\": { \"uid\": \"123456\", \"role\": \"admin\", \"name\": \"waqar\" }}";
return;
}else{
echo "phase1: invalid username/password";
return;
}
}catch(Exception $e){
echo $e->getMessage();
}
try{
$request_body = file_get_contents('php://input');
$data = json_decode($request_body);
if($data->username == "test" && $data->password == "test"){
echo "{\"id\": \"700\", \"user\": { \"uid\": \"123456\", \"role\": \"admin\", \"name\": \"waqar\" }}";
return;
}
else{
echo "phase2: Invalid username/password";
return;
}
}catch(Exception $e){
echo $e->getMessage();
return;
}
?>
答案 0 :(得分:0)
通过在params
对象中发送数据,数据将作为查询参数在标题中发送(在网址 - ?key1=value1&key2=value2
中)。
您必须使用data
对象密钥将其发送到正文中:
var req = {
method: 'post',
url: 'http://localhost/login/authenticate.php',
headers: {
'Content-Type': "multipart/form-data"
},
data: { username: user, password:pass }
}
查看documentation了解详情。
如果我理解正确,请在评论中提出:为什么要将参数放入请求的正文而不是URL?
您可以在网址中发送它们,但是您会遇到一些缺点: