【问题标题】:Add and Remove data from MySQL with AngularJS $Resource使用 AngularJS $Resource 从 MySQL 添加和删除数据
【发布时间】:2014-11-11 13:21:51
【问题描述】:

编辑: 我收到要保存的错误:错误:[$resource:badcfg] 保存

得到这个错误:Error: [$resource:badcfg] get

我想这是因为 get() 需要一个对象,而我对两者的响应都是一个数组:"[{"id":"1","name":"Computador"},{"id": "2","name":"Impressora"}]"

代码已更新,我添加了 index.html

我真的很困惑如何处理获取、保存和删除的数据。我必须在php上做吗?


我有一些关于 MySQL 的数据,想用 AngularJS 来管理它,但是我的保存、删除和获取功能都不能正常工作,唯一有效的是 query()。

app.js

var app = angular.module('app',['ngResource']);

app.controller("lojaCtrl", function($scope, $resource){

    var Produto = $resource("/loja/produtos/", {}, {
        "save:": {method: 'POST', isArray:true}
    }); 

    $scope.produto = {};
    $scope.produtos = [];

    $scope.getProdutoById = function(){
        Produto.get({id:$scope.codigo}, function(data) { //função get
            $scope.produto = data;              
        });
    }

    $scope.getProdutos = function(){
        Produto.query(function(data) { //função query
            $scope.produtos = data;
        });
    }

    $scope.selectProduct = function(produto)
    {
        $scope.produto = produto;   
    }

    $scope.saveProduto = function(){
        //$scope.products = Produto.query();
        new Produto($scope.inserir).$save(function(data) {
            $scope.products.push(data);
        });
    }

    $scope.deleteProduto = function(){
        Produto.delete({Id:$scope.codigo}, function(data) {
        });
    }

});

产品/Index.php

header('Content-Type: application/json');

$banco = "produtos";
$usuario = "root";
$senha = "";
$hostname = "localhost";
$conn = mysql_connect($hostname,$usuario,$senha); mysql_select_db($banco) or die( "Não foi possível conectar ao banco MySQL");      

$sql = "SELECT * FROM t_produtos";
$rs = mysql_query($sql);

class Produto
{
    public function __construct($id, $name)
    {
        $this->id = $id;
        $this->name = $name;
    }

    public $id;
    public $name;
}

while($row = mysql_fetch_array($rs)){
    $p = new Produto($row['id'],$row['nome']);
    $products[] = (object)array('id' =>$p->id, 'name' =>$p->name);
}

if (isset($_GET['Id']))
{
    $p = $products[($_GET['id']-1)];
    echo json_encode($p);
    exit;
}

if (!isset($_GET['Id']))
{
    echo json_encode($products);
    exit;
}   

/*$data = file_get_contents('http://localhost/loja/');

$objData = json_decode($data);

$sql = "INSERT INTO t_produtos(nome) VALUES('$objData')";*/ 

索引.html

<body ng-controller="lojaCtrl">
    <input type="text" ng-model="codigo" name="codigo"/>        
    <input type="text" ng-model="produto.id" name="id"/>
    <input type="text" ng-model="produto.name" name="name"/>        
    <button ng-click="getProdutoById()">Get Produto</button>
    <hr/>
    <ul>
        <li ng-repeat="produto in produtos" ng-click="selectProduct(produto)">Id: {{produto.id}} - Nome: {{produto.name}}</li>
    </ul>
    <button ng-click="getProdutos()">Get Produtos</button>
    <hr/>
    <input type="text" ng-model="inserir" name="inserir"/>
    <button ng-click="saveProduto()">Save Produto</button>
    <hr/>
    <button ng-click="deleteProduto()">Delete Produto</button>  
</body>

【问题讨论】:

  • 例如,当您插入时遇到的错误是什么?
  • 当我尝试保存时,我在控制台中收到错误:“错误:[$resource:badcfg] 保存”。 errors.angularjs.org/1.3.1/$resource/… 这是它引用的链接。
  • 打开,您的控制台检查网络选项卡。并尝试找到请求的响应。
  • 该错误是因为您正在接收 JSON,但您正在等待一个数组
  • 嗯,localhost/loja/produtos/… 的响应是数组 [{"id":"1","name":"Computador"},{"id":"2","name" :"Impressora"}],而不是数据。我想我需要用 $save 将数据插入数据库,但我根本做不到。

标签: javascript php mysql angularjs


【解决方案1】:

你得到的错误是因为你的资源正在等待一个对象而不是一个数组..

资源错误,改成如下:

var Produto = $resource("/loja/produtos/", {}, {
        "save:": {method: 'POST', isArray:true}
    });

现在您正在执行真正的“扩展”或覆盖实例的默认保存方法 (默认保存方法等待一个对象而不是数组,这是您得到的错误)

试试看..

还有 new Producto().$save 会向服务器发送一个空帖子。这是你想要的吗?如果不是,您需要将值传递给 producto 实例 与:

new Producto($scope.producto).$save(callback)

var product = new Producto();
product.name = $scope.producto.name;
//... other properties
product.$save(callback);

希望这会有所帮助..

【讨论】:

  • 它没有用,但谢谢。问题是我不知道如何发布我的数据。甚至 get() 都不起作用,只有 query()
  • @VictorMelias 感谢您接受我的回答,但如果这个答案仍然不符合您的需要,您不应该接受它。让我们继续为您的问题找到真正的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多