AngularJS使用$http和可选数据字段

AngularJS使用$http和可选数据字段,angularjs,Angularjs,我使用以下函数将数据发布到API端点。我现在遇到的问题是,$http数据字段是根据函数postdate param选择性地发送的。当我试着运行这段代码时,我得到了一个错误 Uncaught SyntaxError: Unexpected token ( 有人能告诉我我做错了什么以及如何解决这个问题吗?谢谢 postClient: function(postdata, dataobj, Token){ var Deferred = $q.defer();

我使用以下函数将数据发布到API端点。我现在遇到的问题是,$http数据字段是根据函数postdate param选择性地发送的。当我试着运行这段代码时,我得到了一个错误

  Uncaught SyntaxError: Unexpected token ( 
有人能告诉我我做错了什么以及如何解决这个问题吗?谢谢

    postClient: function(postdata, dataobj, Token){

          var Deferred = $q.defer();
          $http({ method: 'POST',
                  url: 'http://api.domain.com/private/clients',

                  if(postdate =='1'){
                     data: dataobj,
                  }

                  headers: { 'Token' : Token }
          }).success(function(data,status,headers,config){
                Deferred.resolve(data);
          }).error(function(data,status,headers,config){ 
                Deferred.reject(status);                  
          });

         return Deferred.promise;    
     }

您已将
if
语句放置在对象文本中。开始键入时:

{ method: 'POST',
  ...
}
您正在指定一个对象。法律语法规定,值可以是标识符(您拥有的)或字符串。值可以是合法的Javascript值,例如其他数字、字符串、其他Javascript对象和函数。(在本例中,当您发布要转换为JSON的内容时,您不能拥有函数)

很难看出你的意图。如果postdate=='1',您的意思是发布一个空对象吗?或者你的意思是发布一个空字符串

下面是一个如何处理空对象的示例。我已将if语句移出函数体,而不是对象文本,并将其保存在变量中:

      var Deferred = $q.defer();
      var data = {};
      if (postdate === '1') {
          data = dataObj;
      }
      $http({ method: 'POST',
              url: 'http://api.domain.com/private/clients',
              data: data,
              headers: { 'Token' : Token }

      ...

如果要跳过
data:dataObject
行,则可以
angular.extend()
扩展
config
对象,因此如果
data
对象为空,则结果对象为空<代码>配置保持不变

var Deferred = $q.defer(),
    data = {},
    config = {
        method: 'POST',
        url: 'http://api.domain.com/private/clients',
        headers: {
            'Token': Token
        }
    }

if (postdate === '1') {
    data = dataObj;
}

$http(angular.extend(config, data));

这还不算是有效的Javascript。你把一个IF块放在一个对象声明的中间。@ IVNNI我可以看到这是一个明显的新手混淆点,因此是有效的。question@DougT. 我只是不知道这个问题如何解决OP以外的任何人的问题。我的意图是排除数据:dataobj,如果postdate='1',则完全行。您的方法很完美,但我想知道是否有一种方法不发送数据:如果dataobj值不是1,那么使用dataobj而不是空对象发送数据?谢谢,这是你那句话的错误假设。配置保持不变。根据角度文档“扩展方法,通过将所有属性从
src
对象*复制到
dst
来扩展目标对象
dst
。您可以指定多个
src
对象。”太棒了!这正是我想要的:)非常感谢
var Deferred = $q.defer(),
    data = {},
    config = {
        method: 'POST',
        url: 'http://api.domain.com/private/clients',
        headers: {
            'Token': Token
        }
    }

if (postdate === '1') {
    data = dataObj;
}

$http(angular.extend(config, data));