【问题标题】:Sending $http.post data in Angular. Php receive empty data [duplicate]在 Angular 中发送 $http.post 数据。 php接收空数据[重复]
【发布时间】:2017-03-03 02:26:34
【问题描述】:

正如标题所说。我想在 php 中向我的后端发出 $http.post 请求,但不工作。让我在今天向您展示我的代码:

function obtenerSesion() { 
        return $http.post(loginUrl,
                 {params: {
                     username: 'prueba123',
                     password: 'prueba123'}
                 })
            .then(function(response) {
                debugger;
                canchas = response.data;
                return canchas;
        })
        .catch(generarError);
    }

在我的 PHP 中有这个:

.
.
22.    $nombreUsuario= $_POST["username"];
23.    $contrasenia=    $_POST["password"];
.
.

我收到响应状态“200”但error.txt在执行php时捕捉到这个:

第 22 行未定义索引

你能告诉我,为什么我的 php 没有收到数据吗? 谢谢!

//编辑//

登录.php

<?php
$response = array();

require("Db.class.php");
require("password.php");
require("jwt.php");

$settings = parse_ini_file("settings.ini.php");
$securityToken= '' . $settings["token"]. '';

$db = new Db();

$nombreUsuario= $_POST["username"]; //email o user
$contrasenia=   $_POST["password"];

// $hash = password_hash($contrasenia, PASSWORD_BCRYPT);


$result = $db->query("SELECT ....);

if(count($result) == 0){
    ...
    ...

如果我对 $nombreUsuario='prueba123' 和 $contrasenia='prueba123' 进行硬编码,则 php 可以完美运行!

【问题讨论】:

  • params 用于查询参数(即$_GET)。你想要data$_POST 但你也想将它编码为application/x-www-form-urlencoded
  • 只需读取行输入并反序列化 json,无需更改 angular $http.post() HTTP 请求的默认内容类型

标签: php angularjs post ionic-framework


【解决方案1】:

您正在发送此对象:

{"params":{"username":"prueba123","password":"prueba123"}}

而不是:

{"username":"prueba123","password":"prueba123"}

正确的代码:

function obtenerSesion() { 
    return $http.post(loginUrl,
             {
                 username: 'prueba123',
                 password: 'prueba123'
             })
        .then(function(response) {
            debugger;
            canchas = response.data;
            return canchas;
    })
    .catch(generarError);
}

然后读取 PHP 中的原始输入并像这样反序列化 JSON:

$postdata = file_get_contents("php://input");

$request = json_decode($postdata);
$nombreUsuario = $request->username;
$contrasenia = $request->password;

编辑://

聊天后这是我提供给他的代码:

   function obtenerSesion() { 
    return $http({ 
    method: 'POST', 
    url: loginUrl, 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
    transformRequest: function(obj) { 
    var str = []; 
    for(var p in obj) 
    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
    return str.join("&"); 
    }, 
    data: {username: 'prueba123', password: 'prueba123'} 
    }).then(function successCallback(response{ 
    debugger; 
    canchas = response.data; 
    return canchas; 
    }, function errorCallback(response) { 
    //do something
    console.log(response);
    });

我们更改了编码请求应用程序 / x-www-form-urlencoded 以满足其特定需求。

【讨论】:

  • 感谢您的回答,但我的 php 中出现了同样的错误。
  • @FederickJons 你能发布更多你的 php 代码吗?
  • 我刚刚编辑了 php。
  • @FederickJons 好的,你需要在 PHP 中读取原始输入,然后反序列化 JSON
  • 有办法用 _POST 获取数据吗?因为java中的另一个应用程序使用了这个PHP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 2017-03-08
  • 2012-09-14
  • 2013-10-15
  • 1970-01-01
相关资源
最近更新 更多