Ajax POST到另一台服务器 - 克服跨域限制

时间:2011-05-07 10:52:44

标签: javascript jquery ajax xss

使用代理是唯一正确的方法吗?我正在开发一个clicktail克隆(网络用户交互和鼠标跟踪分析),到目前为止我所拥有的是一个跟踪所有用户交互的脚本,并将它们发布到我的服务器并保存到数据库,但问题是如果此脚本被添加到将在另一个域上的客户端,则由于跨域脚本限制,Ajax帖子将失败。

从阅读这个,有一些黑客,但我热衷于避免它们。似乎代理是解决这个问题的唯一方法。但这反过来给我带来了更大的问题,因为任何希望使用我的clicktail克隆的客户除了添加javascript之外还必须设置代理。这对于拥有PHP站点的网站管理员来说是直截了当的,因为我可以提供脚本,他们只是在他们的服务器上敲击它,但是对于.net站点,他们必须在他们的解决方案中包含它并重新编译,也许我可以提供一个DLL,但即便如此也必须参考。

我一直在阅读HTML 5 window.postMessage - >这个jquery插件http://benalman.com/projects/jquery-postmessage-plugin/看起来不错,而且我觉得不能用它来回放捕获的用户交互,使用Iframe但它没有,(至少我看不清楚)如何用十字架来解决问题域名AJAX发布。 如果你在我的情况下,你能发布你可能的解决方案吗?

1 个答案:

答案 0 :(得分:2)

在您的情况下,似乎跨域POST确实是可行的。 这里How do I send a cross-domain POST request via JavaScript?讨论了使用Access-Control-Allow-Origin配置接收服务器的可用性。 之后你可以通过jQuery进行POST:

$.ajax({
    type: 'POST',
    url: 'https://to.com/postHere.php',
    crossDomain: true,
    data: '{"some":"json"}',
    dataType: 'json',
    success: function(responseData, textStatus, jqXHR) {
        var value = responseData.someKey;
    },
    error: function (responseData, textStatus, errorThrown) {
        alert('POST failed.');
    }
});
祝你好运!