您需要使用JSONP对数据进行包装,并将其作为
text/javascript
的MIME类型传输,以绕过跨域策略。
有哪些使用JSONP与.net交互的JQuery好例子?
标题提到了.net,但服务器端环境与客户端实现无关。
一个可行的替代方案是在您自己的域上设置一个服务器端脚本,该脚本将使用CURL(或任何其他http lib)转发请求,然后将响应输出到脚本的XHR请求。这种方法在您的客户端脚本和您正在尝试访问的远程域之间设置了一个catchall,因为curl或任何其他服务器端http lib不受跨域策略的限制。
编辑
我要详细介绍一下我的第二种方法,因为你说你需要发送一个post。作为概念证明,我将使用PHP来详细说明需要做什么,但将这个通用想法移植到另一种脚本语言应该很简单。
假设我可以在你的域名下
www.yourdomain.com/data.php
创建一个通用脚本。该文件中的逻辑需要从 HTTP 请求中读取所有我的 post 变量,将它们放入一个 curl 实例中作为对新域的请求,执行该请求,然后将该请求的响应输出回我的 ajax XHR 中,以便第一次没有中介就像原来一样。我喜欢使用
jscol's OOCurl 来使 curl 的语法更加美观。
<?
reqire_once('path/to/oocurl.php');
$c = new Curl('voip.otherdomain.com/api');
$c->post = True;
$c->postfields = $_POST;
$c->failoneerror = True;
$response = $c->exec();
if($c->errno()){
header('Status:' . $c->info(CURLINFO_HTTP_CODE));
echo $c->error();
}else{
header('Content-type: application/json');
echo $response;
}
?>
将您的ajax请求发送到这种类型的脚本将透明地将它们移交给在CURL构造函数中指定的其他域。请注意,我假设返回的MIME类型为json-您可能需要调整此设置以适应您的API。
如果您有用于API的身份验证凭据,则需要手动将它们编码为附加的post变量,并使用
hmac保护端点。这确实取决于您如何进行客户端/服务器端交互,有点超出了重定向器的范围...基本上只需确保定义了服务器哈希盐并且将摘要与您的post请求一起发送,以确保第三方无法简单地发布到您的中介端点。
编辑
如果有人从Google跌入,请注意,我制作了一个库,其中包含我的方法
here.。