编译并传递数组 - 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的主要内容,如果未能解决你的问题,请参考以下文章
如何传递具有多个标题的php数组并开始到fullCalendar 3