有角形式的参数提交

时间:2014-03-24 03:09:37

标签: forms angularjs coffeescript

我试图用Angular设置虚拟表单。我已经设置了表单,但我想假装发送的params并查看结果。我认为它被称为序列化参数。

请在成功$scope.message = "Message sent " + $scope.formData

时考虑以下代码

目前返回Message sent [object Object],我希望返回Message sent {"order": ["company": "test", "phone": "1111"]}

发送的参数

这是完整的代码

angular.module("app").controller "ContactController", ($scope, $http) ->
  $scope.formData = {}

  $scope.processForm = ->
    console.log $scope.formData

    $http(
      method: "POST"
      url: 'process.php'
      data: $scope.formData
    ).success( (data) ->
      # if successful, bind success message to message
      $scope.message = "Message sent " + $scope.formData
      $scope.formData = ''
    ).error (status) ->
      console.log "An error occured processign form"
      # if not successful, bind errors to error variables
      $scope.errorFirstName = data.errors.firstName
      $scope.errorLastName = data.errors.lastName

2 个答案:

答案 0 :(得分:2)

这实际上相当简单。当您在某个对象上调用toString()时(您在那里做的事情),JavaScript会返回[object Object]而不是帮助。 这很容易解决,只需将$scope.formData更改为JSON.stringify($scope.formData)即可。因此:

$scope.message = "Message sent " + JSON.stringify($scope.formData)

答案 1 :(得分:0)

Zeke的答案比我的简单得多。我打算建议使用这样的函数将JavaScript对象转换为JSON字符串:

function objToJSONString (obj) {
    var str = '';
    for (var p in obj) {
            str += "\"" + p + "\":\"" + obj[p] + "\",";
    }
    // remove last comma
    if(str.length > 0){
        str = str.substr(0,str.length-1)
    }
    return '{' + str + '}';
}

但是,这个功能并非没有它的缺陷;因为它不会处理嵌套对象。