2012-05-28 25 views
0

我试图构建一个.js文件,它将数据发送到外部API,等待响应并解释结果。外部API是基于XML的,并接受一个HTTPS Post,其XML为body(content-type; text/xml)。我可以通过cURL正确调用API。jQuery上的API调用

这是我到目前为止有:

<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body onload="CallService()"> 

<script type="text/javascript"> 
var webServiceURL = 'https://www.url.com'; 
var xmlString = '<xml><parameter1>value1</parameter1> 
<parameter2>value2</parameter2></xml>'; 

function CallService() { 
    $.ajax({ 
     url: webServiceURL, 
     type: "POST", 
     dataType: "xml", 
     data: xmlString, 
     processData: false, 
     contentType: "text/xml; charset=\"utf-8\"", 
     success: OnSuccess, 
     error: OnError 
}); 
    return false; 
} 

function OnSuccess(data, status) { 
    alert(data.d); 
} 

function OnError(request, status, error) { 
    alert('error'); 
} 

$(document).ready(function() { 
    jQuery.support.cors = true; 
}); 
</script> 
</body> 
</html> 

当我打开HTML我得到一个警告说“错误”,并没有出现在另一端(外部API的)。有没有办法使用JavaScript/Ajax/jQuery来做到这一点,还是我需要一个接收JS调用的“支持”代码?

+2

存在各种问题,从浏览器调用不同域的URL。基本的答案是,这是不可能的,尽管一些最近的发展使服务器允许这样的请求成为可能。你必须控制服务器软件才能做到这一点。 – Pointy

+0

如果我确实控制了服务器,该怎么办?为了达到这个目的,我需要改变什么样的设置? – user1375193

+0

寻找关于“CORS” - 跨源资源共享的教程。这是一个HTML5的东西,它涉及一些特殊的标题和类似的东西。当然,旧的浏览器不支持它,但它毕竟是2012年:-) – Pointy

回答

0

当你想跨域查询,你已经基本上3种解决方案:

1)使用JSONP,这将不感兴趣你,如果你正在使用XML和JSON不

2 )通过在服务于主html页面的服务器上设置一种代理服务器(或任何类型的获取服务),不是真的跨域,3)在服务器上更改标题以向浏览器指定您接受跨域请求,域查询。这是新的,但被所有主流浏览器接受。这就是所谓的CORS。在所有服务器端语言中更改标题(“Access-control -...”)非常容易,因此现在应该是首选方式(如果您遇到问题(安全性,权限,带宽,广告等)访问您所服务的数据,您可以限制允许的来源)。