【发布时间】:2016-04-11 11:59:15
【问题描述】:
我是 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 是否有办法知道一行是否实际插入与否。
【问题讨论】:
-
您必须将其作为来自服务器端代码的响应发送,别无他法。
-
从
phpend 发送成功响应并在控制器中处理相同的内容.. -
您的 PHP 文件应该检查一切是否正常,然后打印一个带有结果的 JSON。例如
{"status":"ok"}或{"status":"error"}。在 Angular 中,您可以通过捕获由 $http 服务返回的承诺来获取这些数据(就像在您的代码中一样)。然后响应包含一个对象数据,这正是来自服务器的响应(response.data.status是ok或error)。您还可以发送另一个 HTTP 状态代码(200 与例如 400 或 500)。然后你可以在then的第一个参数函数中捕获成功案例,在第二个参数函数中捕获错误。 -
添加
if ($stmt->rowCount()) { $status = json_encode('{"status" : 1}'); } else { $status = json_encode('{"status" : 0}');}之类的内容与将其回显到页面然后使用另一个ajax 调用来获取json 相比会浪费时间吗?在我对 json 进行编码后,有没有更好的方法可以将数据传回我的 JS 而无需再次调用? - 我提前为我的无知道歉,对 JS 世界非常陌生,尤其是 Angular。 -
您有一个 PHP 页面可以完成所有工作:插入数据库并检查它是否在数据库中。如果它在那里,则返回状态 1,否则返回状态 0。Angular 一直在等待,直到您获得 PHP 的最终响应(页面已完全加载)。因此,您不必为此再打电话(当然,您可以这样做..)。如果要将插入的数据传回 angular,只需创建返回对象的扩展版本。类似于:
{"status":1,"data":[{"model":"Audi"},{....}]}或您在 PHP 中拥有的任何其他数据结构。 (为此使用 json_encode)
标签: javascript php mysql angularjs xmlhttprequest