Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 解析Angular 1.5中的相对$resource路径_Angularjs_Rest_Angular Resource - Fatal编程技术网

Angularjs 解析Angular 1.5中的相对$resource路径

Angularjs 解析Angular 1.5中的相对$resource路径,angularjs,rest,angular-resource,Angularjs,Rest,Angular Resource,我的Angular 1.5.8 web应用程序位于http://www.example.com/foo/我的RESTful条形图列表位于http://www.example.com/foo/api/bars。当ui router转到Angular中的条列表时,我的浏览器位于http://www.example.com/foo/#/bars。我只想连接到一个RESTful资源以连接到http://www.example.com/foo/api/bars使用HTTPGET 所以我尝试了最明显的事情:

我的Angular 1.5.8 web应用程序位于
http://www.example.com/foo/
我的RESTful条形图列表位于
http://www.example.com/foo/api/bars
。当ui router转到Angular中的条列表时,我的浏览器位于
http://www.example.com/foo/#/bars
。我只想连接到一个RESTful资源以连接到
http://www.example.com/foo/api/bars
使用HTTP
GET

所以我尝试了最明显的事情:

$resource("api/bars/")
在我看来,应该将
api/bar/
解析为当前路径
http://www.example.com/foo/#/bars
给我
http://www.example.com/foo/api/bar
,对吗?但是它不起作用(尽管我可以发誓它是用
$http
工作的)。相反,它给了我一个
$resource:badcfg
错误

Angular允许我执行以下操作,但这不会生成正确的路径,而是为我提供
http://www.example.com/api/bars

$resource("/api/bars/")
所以我尝试了
$browser.baseHref()
,但这似乎被设置为空字符串(为什么?)http://www.example.com/api/bars请再说一遍

$resource($browser.baseHref() + "/api/bars/")
我试图使用
$location.path()
,但Angular认为我需要哈希符号后的路径,因此这不起作用,给了我
http://www.example.com/bars/api/bars
。啊

$resource($location.path() + "/api/bars/")
如何将
api/bar/
解析为当前URL的基本路径
http://www.example.com/foo/#/bars
,产生
http://www.example.com/foo/api/bars
(甚至只是路径)

请注意,硬编码绝对路径或更改HTML代码对我来说是不可接受的。我为什么要这样做?此外,此应用程序将安装在同一服务器上的两个位置(嘿,Java、Tomcat和JAX-RS很容易),安装位置为
http://www.example.com/foo/
http://www.example.com/foo-demo/
。应用程序应该在每个位置下不加修改地运行,在
http://www.example.com/foo/api/bars
http://www.example.com/foo-demo/api/bars


这并不复杂;这就是简单的“URI语法101”,在RFCs中已经概述了二十多年。我只想将
api/bar/
解析为当前URL的基本路径
http://www.example.com/foo/#/bars
。在Angular 1.5中如何实现这一点?

好的,有两种方法。如果您绝对想要绝对路径,可以使用以下选项:

$resource(location.origin + location.pathname + "api/bars/")
注意使用object
location.origin
来建立协议、域和端口;和
location.pathname
来建立基本路径。(微软将再次施压:在某些版本的Windows10上,IE11上的
location.origin

但更好的方法是简单地使用:

$resource("api/bars")

“等等,我以为你说过这会给你一个错误!”你可能会惊呼。事实证明我错了。我确实收到了一个错误,但这是因为我没有设置
Accept
头来请求JSON,而我得到的
纯文本
响应(这是我的RESTful资源上的默认值)让人困惑
$resource
。事实证明,相对URI终究会起作用。

可以对
$resource
使用相对路径语法,因为它可以与
$http
一起使用,后者由
$resource
使用。这可以通过省略前导斜杠(如您所建议的)或在资源前面加上
/
来实现

您的
badcfg
错误似乎更可能出现,因为您的请求工作正常,但服务器响应与预期不符。因此,可能返回的是单个对象,而不是数组。请使用开发工具来调试服务器真正返回的内容


有关详细信息,请参阅。

您在所有方面都是正确的……但您似乎一直在键入您的答案,就像我键入我的一样,因此您没有看到我的帖子。如果早两分钟,你会比我早到的我仍然认为你的答案是正确的,因为你已经完成了所有的工作,但我的答案确实指出了一个创建绝对的、解决的路径的解决方案。感谢您在正确而有能力的回答中考虑问题。这很好,它还提供了一个有价值的信息,即不仅阵列与对象问题可能是您收到错误的原因。