0

我正在尝试构建一个将数据发送到外部 API、等待响应并解释结果的 .js 文件。外部 API 基于 XML,并接受以 XML 作为正文(内容类型;文本/xml)的 HTTPS Post。我可以通过 cURL 正确调用 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 调用的“支持”代码?

4

1 回答 1

0

当您想进行跨域查询时,您基本上有 3 种解决方案:

1) 使用JSONP,如果您使用的是 XML 而不是 JSON,您将不会感兴趣

2) 通过在服务于主 html 页面的服务器上设置一种代理(或任何类型的 get),不真正做跨域

3)更改服务器上的标头以指定您接受跨域查询的浏览器。这是新的,但已被所有主要浏览器接受。这就是所谓的CORS。在所有服务器端语言中更改标题(“访问控制-...”)很容易,因此现在应该是首选方式(如果您遇到问题(安全、权限、带宽、广告等)) - 域访问您服务的数据,您可以限制允许的来源)。

于 2012-05-29T14:00:58.317 回答