【问题标题】:How does AngularJS $resource send updated data?AngularJS $resource 如何发送更新的数据?
【发布时间】:2017-03-18 17:41:06
【问题描述】:

我刚刚开始尝试学习 AngularJS,并试图让一个简单的应用程序正常工作,它只显示和更新 MySQL 数据库中的项目。

我有一个 PHP REST API 正在处理来自应用程序的请求。

到目前为止,API 已成功将数据库中的所有项目以 JSON 编码数组的形式传回。它还传回一条记录,但我无法让它更新记录。

当我点击表单上的保存按钮时,我看不到更改的数据是如何从应用程序传递到 API 的。它应该作为 $_POST 变量传递吗?

这是我的应用程序中的 JS 代码:

angular.module('starter.services', []).factory('List', function ($resource) {
    return $resource('http://example.com/restAPI/:id', { id: '@id' }, {
        update: {
            method: 'PUT'
        }
    });
});

angular.module('starter', ['ionic', 'ngResource', 'starter.controllers', 'starter.services'])
.config(function($stateProvider, $urlRouterProvider) {
    $stateProvider

    .state('list', {
        url: '/',
        templateUrl: 'templates/list.html',
        controller: 'ListController'
    })

    .state('editItem', {
        url: '/items/:id/edit',
        templateUrl: 'templates/item-edit.html',
        controller: 'EditController'
    })

    $urlRouterProvider.otherwise('/');
});

angular.module('starter.controllers', [])
.controller('ListController', function ($scope, $state, $stateParams, List) {
    $scope.items = List.query();
})

.controller('EditController', function ($scope, $state, $stateParams, List) {
    $scope.updateItem=function(){
        $scope.item.$update(function(){
            $state.go('list');
        });
    };

    $scope.loadItem=function(){
        $scope.item=List.get({id:$stateParams.id});
    };

    $scope.loadItem();
});

这是表单代码:

<form class="form-horizontal" role="form" ng-submit="updateItem()">
<div class="form-group">
    <label for="title" class="col-sm-2 control-label">Title</label>
    <div class="col-sm-10">
        <input type="text" ng-model="item.title" class="form-control" id="title" placeholder="Title Here"/>
    </div>
</div>

<div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
        <input type="submit" class="btn btn-primary" value="Save"/>
    </div>
</div>
</form>

当应用加载时,初始状态为“列表”,数据库中的所有项目都在页面上可见。

列表中的每个项目都有一个编辑按钮。当我单击编辑按钮时,状态更改为“editItem”,并且新页面加载了单个项目。到目前为止,一切顺利。

当我对数据进行更改并点击保存按钮时,函数 updateItem 会以ng-submit="updateItem()" 调用。

这会调用 API,但我看不到它如何传递更新的数据。当我在 API 中尝试 error_log($_POST["title"]); 时,我在错误日志中看到“PHP 通知:未定义索引:标题”。如何访问 API 中更改的数据以便更新数据库?

这是我正在使用的 .htaccess - 这可能有问题吗?这是我在互联网上找到的,所以我对它的工作原理知之甚少。

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?id=$1 [QSA,NC,L]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ api.php [QSA,NC,L]

RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ api.php [QSA,NC,L]
</IfModule>

【问题讨论】:

  • 嗨达米安你从什么得到:var_dump($_POST);
  • 我试过 error_log(var_dump($_POST));但我在错误日志中得到的只是 stderr: ,referer: localhost:4400/index.html
  • 嗨,我想要 var_dump 的结果不是:“error_log(var_dump($_POST));”。请只使用“ var_dump($_POST);”我将无法访问 localhost,您可以将 IP 地址发送给我。如果你愿意,可以在 Skype 上加我,我可以快速浏览一下:wils_br
  • 哦!此外,方法:'PUT' 应该改为:方法:'POST'
  • $update 方法不是默认的 ngResource 操作方法。我们需要查看List 服务的代码来了解该方法是如何定义的。大多数 RESTful API 使用 PUT 来更新集合中的项目。一般 POST 用于在集合中创建新项目。

标签: php angularjs rest ngresource


【解决方案1】:

感谢大家的回复。

@georgeawg - 你让我走上了正确的道路。我以前只使用过 GET 和 POST,而更新方法使用 PUT,正如您指出的那样。

一旦我意识到这一点,我就在这里找到了答案…… REST request data can't be read in 'put' method

这段代码对我有用....

$data = json_decode(file_get_contents("php://input"), true);
error_log($data['title']);

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 2014-02-15
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多