是否可以使用网址中的端口号执行HTTP post请求?
这很好
$http.post('http://localhost/httpPost.json', data);
但这不起作用
$http.post('http://localhost:8081/httpPost.json', data);
答案 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 - )