如何在angularjs中传递一个JSON对象给一个资源

How to pass in a JSON object to a resource in angularjs

本文关键字:一个 JSON 对象 资源 angularjs      更新时间:2023-09-26

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

我现在想从我的AngularJS发送请求到webservice。下面是我的代码:

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,这意味着我传递的参数被作为空传递。

我如何传入这个对象,使服务器将它们解释为包含两个数组的对象。我是AngularJS的新手,不能理解分配传入参数的@符号。如果这里有人能帮我一下就太好了。

您不需要在searchData中包含参数,因为JSON将在POST请求的正文中发送。尝试从searchData中删除它们。然后在你的控制器中,尝试像这样调用你的服务:

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

注意{}作为第一个参数,这是您的请求的参数。第二个{}用于有效负载。这将在请求有效负载中发送JSON,而不是作为参数。如果不适合你,请告诉我。我曾经做过和你类似的事情,这种方法对我很有效。

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

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';

使用默认的内容类型头,表单参数不会作为表单参数附加到请求中,并且不能在服务器端代码中作为表单参数访问它们。

其次,:

{ 
  tag: '@tagSearchInput.tag',
  details: '@tagSearchInput.details'
}

不是一个有效的JSON对象。属性名必须用双引号括起来。在这里,它们都在none中。属性值也必须用单引号括起来;这里用单引号括起来。

我认为应该是一个有效的JavaScript对象;但它不是JSON。你可以在这里调整:

{ 
  "tag": "@tagSearchInput.tag",
  "details": "@tagSearchInput.details"
}

我写了一篇关于我把AngularJS和ColdFusion集成在一起的经验的博文。我一直在做的是将我的对象转换为JSON字符串,然后再传递它们。然后服务器端将反序列化JSON字符串。

这是一个很棒的帖子,类似于我的,那是PHP的焦点