我在另一个域B(api.domainb.com(上设置了一个api,并想从域a(www.domaina.com(调用它。然而,当我通过jquery ajax从域a调用域B时,jquery最终试图调用www.domaina.com/api.domainb.com,这显然会返回一个错误。以下是相关的javascript代码
$.ajax(
url: 'http://api.domainb.com',
type: 'GET',
dataType: 'jsonp',
data: {hello: 'world'},
crossDomain: true,
success: function(data){
alert(JSON.stringify(data))
},
error: function(error){
alert(JSON.stringify(error))
});
最终,域A和域B中的代码将在同一个域上,但目前,我需要进行跨域调用。关于如何使这项工作发挥作用,有什么建议吗?
您只是缺少协议,所以Ajax调用知道它是一个不同的域,而不是一个相对的URL。尝试使用url: 'http://api.domainb.com'
。
您不能进行跨域调用;浏览器一般是不允许的。但是,您看到所描述的行为的原因是您的URL缺少"http://"前缀。
使用相当新的HTML5API可以做一些事情来"获得权限"进行跨域调用。
edit@Dan正确地指出,虽然XMLHttpRequest(人们通常称之为"ajax"(不会做跨域的事情(CORS除外(,但可以利用<script>
标记可以引用其他域的事实来组合服务。但是,服务器端代码必须有所不同。(这通常被称为"JSONP"。(