AngularJS中$http.get向PHP传数据失败,提示cart键未定义
问题说明
测试功能时,点击按钮可将对象推入数组,再通过AngularJS的$http.get方法把数组发送到PHP文件——点击按钮能正常收到响应,但直接打开PHP文件时,会出现“cart键未定义”的错误,希望能正常打印cart的值,寻求解决办法。
相关代码
主文件(test.php)
<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> </head> <body ng-app="testapp" ng-controller="testctrl"> <button ng-click="senddata()">Send</button> <a href="http://localhost/proj/process_cart.php">Click</a> <script> var app = angular.module("testapp", []); app.controller("testctrl", function($scope, $http) { $scope.cart = []; $scope.senddata = function() { $scope.cart.push({id: 1, name: "Aaryan"}); var url = "http://localhost/proj/process_cart.php"; var data = { cart: JSON.stringify($scope.cart) }; $http.get(url, { params: data }) .then(function(response) { alert(response.data); }, function(error) { alert('Error: ' + error.data); }); }; }); </script> </body> </html>
处理文件(process_cart.php)
<?php $cart = json_decode($_GET['cart'], true); if ($cart) { echo "Received cart data:\n"; print_r($cart); } else { echo "Error: No cart data received."; }?>
解决办法
直接打开PHP文件或点击页面里的<a>标签时,浏览器发起的GET请求没有携带cart参数,导致$_GET['cart']触发“未定义”错误,可通过以下方式修复:
1. 给PHP添加参数存在性检查
修改process_cart.php,先判断cart参数是否存在,再处理数据:
<?php if(isset($_GET['cart'])){ $cart = json_decode($_GET['cart'], true); if ($cart) { echo "Received cart data:\n"; print_r($cart); } else { echo "Error: Invalid cart data format."; } } else { echo "Error: No cart parameter provided."; } ?>
2. 让页面链接携带cart参数
如果希望点击<a>标签也能传递cart数据,可使用AngularJS的ng-href和json过滤器动态生成带参数的链接:
<a ng-href="http://localhost/proj/process_cart.php?cart={{cart | json}}">Click</a>
这样点击链接时,会自动把当前$scope.cart的JSON字符串作为cart参数传递给PHP文件。
内容的提问来源于stack exchange,提问作者Aaryan Fatnani
相关产品推荐
相关产品推荐

