【问题标题】:how to post a json array from angularjs controller to php page如何将 json 数组从 angularjs 控制器发布到 php 页面
【发布时间】:2016-02-13 12:47:01
【问题描述】:

我使用了 $http.post() 方法。这是代码

$scope.checkout = function(){
         $http({
        url:"checkout.php",
        data : $.param($scope.orders),
        method : 'POST',
        headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
    }).success(function(data, status, headers, config) {
        $scope.sdata = data;
    }).error(function(data, status, headers, config) {
        $scope.status = status;
});
    }

我的 json 数组存储在 $scope.orders 中,我想发布到同一文件夹中的 checkout.php。

在php页面中我的代码是

<?php
$data = file_get_contents("php://input");
    $postData = json_decode($data);
    foreach ($postData as $post) {
    echo $post->name;
    echo "<br>";
    echo $post->price;
    echo "<br>";
    echo $post->quantity;
    echo "<br>";
    echo "<br>";
}
?>

但它不起作用。

请告诉我如何重定向到 checkout.php。基本上我是在单击按钮时发布这些数据,并且我想在发布数据后重定向到 checkout.php。

【问题讨论】:

    标签: javascript php html angularjs json


    【解决方案1】:

    您的 php 期望以 application/json 的内容类型发送数据,这是 $http 的默认值。

    但是,您将默认内容类型更改为 application/x-www-form-urlencoded

    如果您希望$http 保持不变,您需要使用$_POST 而不是file_get_contents()

    如果您希望 php 保持不变,您需要从 $http 中删除内容类型标头,而不是使用 $.param 来序列化数据。

    还请注意,如果您想在 ajax 之后重定向到 checkout.php,则重定向将不包含发布数据,因此您需要将其存储在会话中以使其正常工作。否则你可能根本不需要$http,应该只使用浏览器提交表单而不是拦截以$http发送

    【讨论】:

    • 对不起,我是 Angular 新手,您能告诉我如何在 js 文件中使用会话变量。因为控制器代码位于单独的 js 文件中。
    • 会话我指的是服务器会话。每次调用 checkout.php 时,它都是一个新实例,因此如果您重定向到它,数据将不存在,但如果您使用默认浏览器进程提交表单,它就会存在
    • 我可以使用角度服务在各个页面中使用变量
    • 不加载新页面,javascript不是持久化的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2015-05-05
    • 1970-01-01
    • 2014-02-11
    • 2017-03-16
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多