【问题标题】:Check if php insert was successful when using AngularJS $http检查使用AngularJS $http时php插入是否成功
【发布时间】: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 是否有办法知道一行是否实际插入与否。

【问题讨论】:

  • 您必须将其作为来自服务器端代码的响应发送,别无他法。
  • php end 发送成功响应并在控制器中处理相同的内容..
  • 您的 PHP 文件应该检查​​一切是否正常,然后打印一个带有结果的 JSON。例如{"status":"ok"}{"status":"error"}。在 Angular 中,您可以通过捕获由 $http 服务返回的承诺来获取这些数据(就像在您的代码中一样)。然后响应包含一个对象数据,这正是来自服务器的响应(response.data.statusokerror)。您还可以发送另一个 HTTP 状态代码(200 与例如 400 或 500)。然后你可以在then的第一个参数函数中捕获成功案例,在第二个参数函数中捕获错误。
  • 添加if ($stmt-&gt;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


【解决方案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 请求文件与部分文件分开使一切变得更容易和易于管理。上述解决方案不起作用,因为在到达 JSON 内容之前发送了 HTML 数据!

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多