Javascript 如何将JSON对象传递给angularjs中的资源

Javascript 如何将JSON对象传递给angularjs中的资源,javascript,json,angularjs,angularjs-service,angularjs-resource,Javascript,Json,Angularjs,Angularjs Service,Angularjs Resource,我想使用一个web服务,它接收JSON对象。该对象在POST请求中绑定两个数组,并返回一个JSON对象数组 我现在想从我的AngularJS向Web服务发送请求。这是我的密码: wellApp.factory('Search', ['$resource',function($resource){ return $resource('/filetables/searchdata/:tagSearchInput', { },

我想使用一个web服务,它接收JSON对象。该对象在POST请求中绑定两个数组,并返回一个JSON对象数组

我现在想从我的AngularJS向Web服务发送请求。这是我的密码:

wellApp.factory('Search', ['$resource',function($resource){

    return $resource('/filetables/searchdata/:tagSearchInput',
            {
            },
            {
                searchData:{
                    method:'POST',
                    isArray: true,
                    params:{ tag: '@tagSearchInput.tag',
                            details: '@tagSearchInput.details'
                    }
                }
            })

}])


function myWellsCtrl($scope,$resource, Wells, Tags, Search) {

    $scope.wellSearchResult = Search.searchData({tag: ["TypeOfWell"],
                                                 details: ["Vertical"]});
};
如果我这样做,我会在服务器端得到一个NullPointerException,这意味着我传递的参数将作为null传递


如何传入此对象,以便服务器将其解释为包含两个数组的对象。我是AngularJS新手,无法理解分配传入参数的@notation。如果这里有人能帮我的话,那就太好了。

你没有提到你使用的是哪种服务器端。但是,您可能需要做的第一件事是设置HTTP头内容类型。我通常在$http对象上全局设置它,如下所示:

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
使用默认内容类型标头,表单参数不会作为表单参数附加到请求,并且不能作为服务器端代码上的表单参数进行访问

第二,这:

{ 
  tag: '@tagSearchInput.tag',
  details: '@tagSearchInput.details'
}
不是有效的JSON对象。属性名称必须用双引号括起来。在这里,它们是封闭的。属性值也必须用单引号括起来;在这里,它们用单引号括起来

我相信这应该是一个有效的JavaScript对象;但它不是JSON。您可以在此处进行调整:

{ 
  "tag": "@tagSearchInput.tag",
  "details": "@tagSearchInput.details"
}
我写了一篇关于我的经历的博客文章。我一直在做的是在将对象通过连接传递之前将其转换为JSON字符串。然后服务器端将反序列化JSON字符串


这是一篇很好的帖子,与我的类似。

你没有提到你使用的是哪种服务器端。但是,您可能需要做的第一件事是设置HTTP头内容类型。我通常在$http对象上全局设置它,如下所示:

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
使用默认内容类型标头,表单参数不会作为表单参数附加到请求,并且不能作为服务器端代码上的表单参数进行访问

第二,这:

{ 
  tag: '@tagSearchInput.tag',
  details: '@tagSearchInput.details'
}
不是有效的JSON对象。属性名称必须用双引号括起来。在这里,它们是封闭的。属性值也必须用单引号括起来;在这里,它们用单引号括起来

我相信这应该是一个有效的JavaScript对象;但它不是JSON。您可以在此处进行调整:

{ 
  "tag": "@tagSearchInput.tag",
  "details": "@tagSearchInput.details"
}
我写了一篇关于我的经历的博客文章。我一直在做的是在将对象通过连接传递之前将其转换为JSON字符串。然后服务器端将反序列化JSON字符串


这是一篇很好的帖子,与我的帖子类似。

您不需要在searchData中包含参数,因为JSON将在帖子请求的主体中发送。尝试从searchData中删除它们。然后在控制器中,尝试按如下方式调用服务:

Search.searchData({}, {tag: ["TypeOfWell"], details: ["Vertical"]})

注意{}作为第一个参数,它是您请求的参数。第二个{}用于有效负载。这将在请求负载中而不是作为参数发送JSON。如果这对你不起作用,请告诉我。我做了一些类似于你所做的事情,这种方式对我很有效

您不需要在searchData中包含参数,因为JSON将在POST请求的主体中发送。尝试从searchData中删除它们。然后在控制器中,尝试按如下方式调用服务:

Search.searchData({}, {tag: ["TypeOfWell"], details: ["Vertical"]})

注意{}作为第一个参数,它是您请求的参数。第二个{}用于有效负载。这将在请求负载中而不是作为参数发送JSON。如果这对你不起作用,请告诉我。我做了一些类似于你所做的事情,这种方式对我很有效

Jessa我实际上用另一种方式尝试了你的解决方案!。。。。我实际上做了与您建议相反的事情:…我清空了负载,并将参数中的JSON对象发送到服务。像这样的搜索.searchData{tag:[TypeOfWell],details:[Vertical]},{};它工作得很好。感谢杰弗里豪斯和你在这里帮助我!。。。Jessa我实际上用另一种方式尝试了你的解决方案!。。。。我实际上做了与您建议相反的事情:…我清空了负载,并将参数中的JSON对象发送到服务。像这样的搜索.searchData{tag:[TypeOfWell],details:[Vertical]},{};它工作得很好。感谢杰弗里豪斯和你在这里帮助我!。。。