编译并传递数组 - AngularJS 和 PHP

Posted

技术标签:

【中文标题】编译并传递数组 - AngularJS 和 PHP【英文标题】:Compile and pass array - AngularJS & PHP 【发布时间】:2016-02-21 14:04:16 【问题描述】:

尝试使用 AngularJS 和 php 进行 CRUD。

这是我目前的角度函数;

$scope.initCart = function () 
$http(
    method: 'post',
    url: url,
    data: $.param( 'restID' : $scope.restID , 'type' : 'get_cart' ),
    headers: 'Content-Type': 'application/x-www-form-urlencoded'
).
    success (function(data, status, headers, config)
        if(data.success && !angular.isUndefined(data.data) )
            $scope.cart = data.data;
        else 
            $scope.cart = [];
        
 ).
    error(function(data, status, headers, config) 
      //$scope.messageFailure(data.message);
   );

该函数应该将restID发布到PHP,根据逻辑从PHP获取数据并添加到$scope.cart,它应该是一个包含我可以使用ng-repeat访问的所有项目的数组

我的 PHP 是;

function getCart ($connection) 
$data = array();
$rest_id = $_POST['restID'];

try 
    if(isset($_COOKIE['basket'])) 
        $cookie_id = $_COOKIE['basket'];
        $query = "SELECT * FROM cart WHERE cookie_id = $cookie_id";
        $result = mysqli_query($connection, $query);
        $count = mysqli_num_rows($result);

        if($count > 0) 
            $row = mysqli_fetch_assoc($result);

            $cart_id = $row['id'];
            $cart_total = $row['total'];
            $cart_subtotal = $row['subtotal'];

            $query = "SELECT * FROM cart_items WHERE cart_id = $cart_id";
            $result = mysqli_query($connection, $query);
            while($nrow = mysqli_fetch_assoc($result)) 
                $data['data'][] = $nrow;
            
            $data['success'] = true;
            echo json_encode($data);
            exit;
        
     else 
        setcookie('basket', session_id(), time()+604800, "/");
        $cookie = $_COOKIE['basket'];
        $cookie_id = session_id();
        $timestamp = date("H:i:s");

        // Insert cart into DB
        $query = "INSERT INTO `cart`(`cookie_id`, `restaurant_id`, `timestamp`) VALUES ('$cookie_id', '$rest_id', '$timestamp')";
        $result = mysqli_query($connection, $query);
        if ($result) 
            $data['success'] = false;
            echo json_encode($data);
            exit;
        
    
 catch (Exception $e) 
    $data = array();
    $data['success'] = false;
    $data['message'] = $e->getMessage();
    echo json_encode($data);
    exit;
   

这是我目前拥有的;如果这条线是正确的,有人可以向我解释一下;

while($nrow = mysqli_fetch_assoc($result)) 
   $data['data'][] = $nrow;

我正在使用while 从我的数据库中返回项目。 我返回的内容是这样的;

item1.name, item1.price, item1.qty, item1.id
item2.name, item2.price, item2.qty, item2.id

我的目标是获取所有这些项目,将它们添加到$scope.cart 并使用ng-repeat 显示它们。我对数组不是很好。 我在$scope.cart 中没有任何数据 我是不是把数据弄错了?

【问题讨论】:

您是否在数据变量中取回数据? 请解释您的具体问题 - 您期望的结果是什么?你得到了什么?有没有抛出任何错误> $scope.cart 中没有任何数据 您的请求是失败还是通过?你看到什么控制台了吗? 通过,因为$scope.cart 空空返回。我用ng-inspector检查 【参考方案1】:

我认为你让事情变得比他们需要的更复杂。少即是多。

首先,为什么不通过控制台登录data 以查看其中是否存在任何信息:

$http(
    url: url,
    method: 'post',
    data: $.param(restID: $scope.restID , type: 'get_cart'),
    headers: Content-Type: 'application/x-www-form-urlencoded'
)
.success(function(data, status, headers, config)

    console.log('success', data);

    // now we know what we're working with...
)
.error(function(data, status, headers, config)

    console.log('failure', data);

    // welp, we probably cocked up our php script...
);

其次,您的 php.ini 代码中重复的代码让您感到头疼。为什么不在单行中呈现 json 响应并使其成为您做的最后一件事,例如:

/**
 * Echo cart data given the connection.
 *
 * @param object $connection
 * @param array $data
 * @return void
 */
function get_cart($connection, $data = [])

    try
    
        if (isset($_COOKIE['basket']))
        
            // manipulate data array.
        
        else
        
            // manipulate data array.
        
    
    catch (Exception $e)
    
        // manipulate data array.
    

    echo json_encode($data);

如果您不断改进,您将对解决问题有更多的控制权。希望这会引导您朝着正确的方向前进。

【讨论】:

以上是关于编译并传递数组 - AngularJS 和 PHP的主要内容,如果未能解决你的问题,请参考以下文章

了解AngularJS中控制器的基础知识

如何传递具有多个标题的php数组并开始到fullCalendar 3

将数组数据从视图传递到控制器并反向 php codeigniter

Angularjs如何处理来自php(json)的二维数组

Angularjs $http POST 请求空数组

将php变量/数组数据传递给角度js