我是AngularJS的初学者,但我刚刚想出如何使用$http
服务将POST数据传递给PHP文件以插入我的数据库。
这是我的add.php文件。它显示我的表单并在底部有插入代码块:
<h2>Add Car</h2>
<div ng-controller="formCtrl">
<form method="POST">
<label>Make:</label>
<select ng-model="car.make">
<option>Make 1</option>
<option>Make 2</option>
<option>Make 3</option>
</select>
<label>Model:</label>
<input type="text" ng-model="car.model">
<input type="submit" ng-click="addCar(car)">
</form>
<pre>
{{message}}
</pre>
</div>
<?php
$data = json_decode(file_get_contents("php://input"));
$make = $data->make;
$model = $data->model;
$con = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'pass');
$stmt = $con->prepare("INSERT INTO cars (model, make) VALUES(?, ?)");
$stmt->bindParam(1, $model);
$stmt->bindParam(2, $make);
$stmt->execute();
?>
这是我的控制器:
app.controller('formCtrl', function ($scope, $http) {
$scope.addCar = function (car) {
$http({
method: 'POST',
url: 'tools/add.php',
data: car,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
})
.then(function (response) {
$scope.message = "great!";
});
}
});
现在无论如何检查插入是否成功?我知道您可以使用rowCount()
函数检查PHP端,然后将您的消息设置为错误或成功插入,但我想知道是否还有我的JS知道是否实际插入了一行。
答案 0 :(得分:1)
检查插入是否成功:
if ($stmt->execute()) {
// It worked
} else {
// It didn't
}
为什么不在PHP中添加die('Not successful');
之类的内容。然后获取角度以检查是否提供了错误消息:
$http({
method: 'POST',
url: 'tools/add.php',
data: car,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
})
.then(function (response) {
if(!response) {
// Success
$scope.message = "great!";
} else {
// Fail
alert(response);
}
});
别忘了你也可以在Angular中使用.success()
和.error()
。
最后一件事!我发现将JSON请求文件与partials分开使得一切变得更容易和易于管理。上面的解决方案不会起作用,因为在它到达JSON之前发送了HTML数据!