在$ http.post传递的PhP脚本中使用变量

时间:2014-10-17 13:21:41

标签: javascript php mysql angularjs http

在angular im中使用$http.post将id发送到php脚本,以便将此id用于mysql请求。

这是我的控制者:

function ProjectDetailsCtrl($scope, $http, $timeout, getGoodIdProjectDetails) {

    $scope.idProjectDetails = getGoodIdProjectDetails.getId(); //Getting id project

    $scope.$emit('LOAD')
    $scope.url = 'scripts/findProjectDetails.php';

    $http.post($scope.url, { "idProject" : $scope.idProjectDetails}).
    success(function(data, status) {
        $scope.projectDetails = {};
        $scope.projectDetails.details = data;
        $scope.$emit('UNLOAD')
    })
    .
    error(function(data, status) {
        $scope.data = data || "Request failed";
        $scope.status = status;         
    });
}

idProjectDetails是一个数字。

然后是Php脚本:

<?php
$idProject = json_decode($_POST['idProject']);

Php脚本返回$idProject未定义。

你能帮我解决这个问题吗?

编辑:我试过这种方式,但我的应用程序崩溃了:

$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
$http({
    method: 'POST',
    url: 'scripts/findProjectDetails.php',
    data: "idProject" : $scope.idProjectDetails  
}).success(function(data, status) {
    $scope.projectDetails = {};
    $scope.projectDetails.details = data;
    console.log(projectDetails.details);
    $scope.$emit('UNLOAD')
})
.
error(function(data, status) {
    $scope.data = data || "Request failed";
    $scope.status = status;         
});

使用第一个示例,在Chrome控制台中,&#34;请求playload&#34;包含这个:{idProject:1} idProject:1所以我假设我的变量是通过php脚本正确传递的?

1 个答案:

答案 0 :(得分:0)

  

AngularJS的新手之间存在很多混淆,为什么$ http服务速记函数($ http.post()等)似乎不能与jQuery等价物(jQuery.post()等交换使用。)区别在于jQuery和AngularJS如何序列化和传输数据。从根本上说,问题在于您选择的服务器语言本身无法理解AngularJS的传输...默认情况下,jQuery使用Content-Type传输数据:x-www-form-urlencoded和熟悉的foo = bar&amp; baz = moe序列化。然而,AngularJS使用Content-Type:application / json和{&#34; foo&#34;:&#34; bar&#34;,&#34; baz&#34;:&#34; moe&#34传输数据; JSON序列化,遗憾的是一些Web服务器语言 - 特别是PHP - 本身不会反序列化。

具体来说,你的$ _POST变量是空的!

要解决这个问题还有2个解决方案:

我还没有在这里发明任何东西,只是链接...... 希望它能帮到你。