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

use*_*729 37 javascript ajax jquery cross-domain

我需要发送一个AJAX请求,例如,端口8080,守护进程在那里运行.

Dan*_*llo 41

这打破了同源政策.即使使用相同的域,也不能使用其他端口.

您可以像Doug建议的那样使用JSONP .

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

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

ProxyPass     /ajax/     http://www.localhost:8080/
Run Code Online (Sandbox Code Playgroud)

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

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

  • 嘿,CORS怎么样? (4认同)

Dou*_*ner 31

您无法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
});
Run Code Online (Sandbox Code Playgroud)

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

对于键/值对:

mycallback( {'returnkey':'returnvalue', 'other':'data' });
Run Code Online (Sandbox Code Playgroud)

对于数组:

mycallback( [1,2,3] );
Run Code Online (Sandbox Code Playgroud)

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

  • 您应该可以使用`'http://'+ window.location.hostname +':8080/url'`来构建可在本地和在线工作的URL. (5认同)
  • 是否有一种替换`domain.com`的通用方法?这种方式只能在生产中使用,因为我在开发环境中使用`localhost`. (2认同)