如何使用 jQuery 在不同端口上发送 AJAX 请求?

IT技术 javascript jquery ajax cross-domain
2021-02-01 14:56:47

例如,我需要向运行守护程序的端口 8080 发送 AJAX 请求。

3个回答

这打破了同源策略您不能使用不同的端口,即使使用相同的域也是如此。

您可以按照Doug 的建议使用 JSONP

或者,作为另一种可能的解决方法,您可以设置一个非常简单的反向代理如果您使用的是 Apache,请使用mod_proxy)。这将允许您在 AJAX 请求中使用相对路径,而 HTTP 服务器将充当任何“远程”位置的代理。

mod_proxy 中设置反向代理的基本配置指令是 ProxyPass。您通常会按如下方式使用它:

ProxyPass     /ajax/     http://www.localhost:8080/

在这种情况下,您将/ajax/test.xml使用 jQuery请求,但实际上服务器将通过充当http://www.localhost:8080/test.xml内部代理来提供服务

如果您使用的是 IIS,则可能需要使用Managed Fusion URL Rewriter 和反向代理来设置反向代理。

在我发现这个之前,我已经摸索了一天,试图弄清楚为什么我不能跨端口发布数据。谢啦。
2021-03-17 14:56:47
哦,代理会在服务器端造成额外的处理。所以我会选择jsonP
2021-04-03 14:56:47
+1 一个绝妙的答案。我回答了写的“等等等等”的罐头回复,你提供了一个非常可行的解决方案。谢谢丹尼尔!
2021-04-08 14:56:47
嘿,CORS 怎么样?
2021-04-09 14:56:47

您不能POST跨域、子域或端口号提供信息。但是,如果您有权访问守护程序请求站点,则可以使用 JSONP 如果需要返回数据,则daemon需要支持callback查询参数并以正确的格式返回。

将信息传递给守护进程:

$.getJSON('http://domain.com:8080/url/here?callback=?', {
  key: 'value',
  otherKey: 'otherValue'
}, function(data){
     // Handles the callback when the data returns
});

现在只需确保您的守护进程处理callback参数。例如,如果callback=mycallback守护进程的返回(写入页面的唯一内容)应该如下所示:

对于键/值对:

mycallback( {'returnkey':'returnvalue', 'other':'data' });

对于数组:

mycallback( [1,2,3] );

如果您没有 JSONP 或类似的机制,则无法使用 jQuery 进行跨域通信。

有没有通用的替代方法domain.com?这种方式只能在生产中工作,因为我localhost在开发环境中使用
2021-03-30 14:56:47
您应该能够用于'http://' + window.location.hostname + ':8080/url'构建在本地和在线均可使用的 URL。
2021-04-08 14:56:47

这算作一个不同的来源,即使你把它放在同一个盒子上,只是不同的端口。

如果您主要针对 FireFox 3.5 及更高版本等新浏览器,您可以尝试Access-Control在另一个端口中向您的应用程序添加标头,并允许从您的默认应用程序池调用。可以在此处找到有关访问控制标头的信息:https : //developer.mozilla.org/en/HTTP_access_control

IE 也实现了它(同样,在使用不同的 ACTIVEX 控件时,为什么会这样?):http : //blogs.msdn.com/ie/archive/2009/01/14/completing-access-control-support-for-xdomainrequest .aspxhttp://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx