0

我正在尝试使用 AngularJS 发送带有“POST”方法的表单。我使用 $http 发送它,但它总是返回“Cannot POST”和 404 错误。路线是正确的,只有当我通过 Grunt 执行我的应用程序时才会发生(通过“GET”发送完美)。该应用程序是使用 Yeoman 构建的。

我认为这一定是一个愚蠢的问题,但我无法让它发挥作用。

风景:

<form name="formLogin" ng-submit="login()">

<ul>
    <li>
        <label for="user">User</label>
        <input type="text" id="user" name="user" ng-model="user">
    </li>
    <li>
        <label for="pass">Password</label>
        <input type="password" id="pass" name="pass" ng-model="pass">
    </li>

</ul>

<input type="submit" value="Send">

控制器:

    'use strict';
angular.module('myApp')
  .controller('LoginCtrl', function ($scope, $http, $resource) {


    $scope.login = function() {

      var config = {
        url: 'php/login.php',
        method: 'POST',
        data: {
            user: $scope.user,
            pass: $scope.pass
        }
      }; // configuration object

      $http(config)
        .success(function(data, status, headers, config) {
            console.log('success');
            if (data.status) {
              // succefull login

            } else {
              // Wrong login
            }
        })
        .error(function(data, status, headers, config) {
            console.log('error');

        });

    };

  });

我将 Grunt 用于:

grunt server

为什么会这样?

谢谢!

4

2 回答 2

2

我很困惑为什么GET应该在这种情况下工作。appGrunt 服务器只提供来自您的和.tmp目录的静态文件,并且您对.php文件的引用是相对的。因此,使用标准设置,AJAX 请求php/login.php只会返回您位于 中的文件的纯 PHP 源代码app/php/login.php,这肯定不是您想要的。

您可能希望将后端与前端分开,并将 PHP 应用程序放在不同的位置。这可能在不同的位置(例如/api/login.php)或不同的主机下https://api.example.com/login.php。将 Yeoman 应用程序与 API 混合并不是一个好主意。

但是,如果您被迫将它们保留在一个项目中,您可以使用grunt-php从您的 Gruntfile 启动本地 PHP 服务器。

于 2013-08-08T12:55:26.147 回答
0

默认情况下,Angular 会发送 http post 请求,application/jsonapplication/x-www-form-urlencoded这可能会导致问题。更改您的应用程序以接受application/json或替换application/jsonapplication/x-www-form-urlencodedin$httpProvider.defaults.headers.post并自行序列化表单。Angular.js 文档中设置 HTTP 标头部分的更多详细信息。

于 2013-08-10T13:15:14.350 回答