2013-08-21 189 views
4

是否可以使用url中的端口号执行HTTP POST请求?

这是罚款

$http.post('http://localhost/httpPost.json', data); 

但是,这是行不通的

$http.post('http://localhost:8081/httpPost.json', data); 

回答

5

是的,它可以使用在AngularJS请求的端口号。所以问题不在这里。

难道你对“不工作”更精确一点?

检查您的浏览器控制台(Chrome中为F12,如果您在Firefox上安装了Firebug,也是F12)。可能会在此控制台中显示错误消息。

我怀疑跨源策略阻止您获取httpPost.json。如果不是从您试图提取数据的地方进行调用(例如,如果您从文件系统或从8081上运行的另一台服务器打开浏览器),则会发生这种情况。

+0

控制台没有显示任何错误。我正在给Mule ESB发送POST请求,其中HTTP设置为入站端点,其地址设置为localhost:8081/httpPost.json。 Mule安装在我的应用程序运行的同一个系统上。 – BKM

+0

为什么你需要指定端口,如果它没有工作? –

2

如果未提供脚本从相同的端口,然后浏览器将不会允许它。这是一项安全措施。详情请查看CORS

+1

除非你使用Firefox – netpoetica

3

AngularJS Docs for $resource表示“如果您使用的是带有端口号的URL,则会受到尊重。”但是该声明仅在版本1.2.0rc1之后有效,该版本是一个全新的版本,具有突破变化(source)

周围有此错误的几种方法:

// named parameter 
$resource('http://example.com:8081', { 
    '8081': ':8081' 
}); 

// named parameter 
$resource("http://example.com:port", { 
    port: ':8081' 
}); 

// escaped 
$resource('http://example.com:8081\:8081'); 

挑选你的毒药。 但是,如果您不能更改代码中的每个$资源URL,还有另一种方法。您可以通过更改angular-resource.min中的一行代码来修复错误。我在Google Group post中描述了这个过程,我在下面粘贴了这个过程:

下载angular-resource.js并像这样编辑它。按照patch,你必须用这个代替行348:

  if (!(new RegExp("^\\d+$").test(param)) && param && (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) { 

就是这样。只需将文件托管在您自己的Web服务器上,即可享受功能,就像它从未打破。 8-)