AngularJS $ http POST与端口号

时间:2013-08-21 09:29:12

标签: angularjs http-post

是否可以使用网址中的端口号执行HTTP post请求?

这很好

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

但这不起作用

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

3 个答案:

答案 0 :(得分:5)

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

你能不能更准确地“不工作”?

检查浏览器控制台(Chrome中为F12,如果Firefox上安装了firebug,则为F12)。此控制台中可能显示错误消息。

我怀疑Cross-Origin策略阻止你获取httpPost.json。如果没有从您尝试提取数据的位置进行调用(例如,如果您从文件系统或从8081上运行的服务器以外的其他服务器打开浏览器),则会发生这种情况。

答案 1 :(得分:3)

如果您的脚本不是从同一端口提供的,那么浏览器将不允许它。这是一项安全措施。查看CORS了解详情。

答案 2 :(得分:3)

AngularJS Docs for $resource说“如果您使用的是带有端口号的网址,则会受到尊重。”但该语句仅在版本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');

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

下载angular-resource.js并进行编辑。根据{{​​3}},您必须用以下代码替换348行:

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

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