Javascript 需要将数据从一个网站异步发送到另一个网站

Javascript 需要将数据从一个网站异步发送到另一个网站,javascript,jquery,ajax,Javascript,Jquery,Ajax,我的脚本跟踪客户端页面上的点击并将其上传到我的服务器(我们称之为。http://fancyclickserver23.net) 现在我希望客户端在他的站点上放置一个脚本,该脚本将标记页面上的点击并将数据发送到。http://fancyclickserver23.net 在页面离开,甚至可能不时 当然,由于跨浏览器的限制,我不能使用Ajax。那我该怎么做呢? 我将给出一些假设代码来帮助您理解。 我有一个闭包跟踪器,当用户输入 <script src="http://fancyclickser

我的脚本跟踪客户端页面上的点击并将其上传到我的服务器(我们称之为。http://fancyclickserver23.net)

现在我希望客户端在他的站点上放置一个脚本,该脚本将标记页面上的点击并将数据发送到。http://fancyclickserver23.net 在页面离开,甚至可能不时

当然,由于跨浏览器的限制,我不能使用Ajax。那我该怎么做呢? 我将给出一些假设代码来帮助您理解。 我有一个闭包跟踪器,当用户输入

<script src="http://fancyclickserver23.net/loadtracker.php?client_id=2332"></script>

代码加载closure tracker=function(){..}; 用户需要创建跟踪器的对象

<script>
track=new tracker();
track.init();
</script>

track=新跟踪器();
track.init();
init()基本上绑定了一个函数,该函数获取元素的Xpath并将其存储在track.clicks中。现在我需要一个函数track.send(),它将以json的形式发送clicks数组(我知道如何将其转换为json),并在页面关闭时发送

我该怎么做呢。此外,我还看到一些网站使用了以下内容:

 document.write("<sc"+"ript"+" src='https://fancyclickserver23.net/loadtracker.php?client_id=2332'"+"></scr"+"ipt>";
document.write(“”;
为什么要这样做而不是直接脚本标记?如果我们必须使用document.write(),为什么不把它放在一个字符串中呢

因此,这两个问题是:

  • 如何在页面加载时异步(或以其他方式)发送数据
  • 上面的代码是做什么的
  • 我见过Google analytics和Facebook这样做,他们似乎没有任何问题。Facebook事实上在屏幕上呈现对话框。如何

  • 如果可以将单击数据数组转换为查询字符串,则可以执行以下操作:

    var img = new Image(1,1);
    img.src = "http://example.com/clicks-receiver?" + query_string;
    
    var url = your_other_domain_url + "jsoncallback=?";
    var params = {param1:val1, param2:val2};
    $.ajax({
      type: 'POST',
      url: url,
      data: params,
      success: function(data){
                //success jsonp handler - assume content in data.response
                if(data.response){
                   //do something with the remote site content
                }
      },
      dataType: "json"
    });
    
    使用:

    只要你想发送数据,就调用这个函数

    现在在另一台服务器上,将响应设置为纯JS代码,例如

    alert("Data Received");
    

    在另一台服务器上,尽管存在跨域安全限制,您仍然可以在一定程度上使用AJAX(XHR)

    浏览器不能像那样丢弃跨域请求。它必须先查看服务器对它的看法。它通过将实际请求发送到服务器并在HTTP头中接收指令以及响应来完成此操作。如果
    Access Control Allow Origin
    头未到达或与源dom不匹配ain,浏览器会破坏响应并在控制台中抛出安全警告

    根据我个人的经验,
    访问控制是否允许源站
    标题,当siteaaa.com向sitebbb.com发送一个AJAX请求时,数据有效负载向服务器的单向传递无论如何都会发生。这只是一段独白,但收集数据还需要什么,对吗?;)


    一、 例如,将单向技术用于类似于您的东西——我收集关于我的开源项目结果的JSON报告。您可以在控制台中发现安全警告,但此时报告已安全存储在服务器上。

    您可以使用jQuery和jsonP来实现这一点

    1) 进行如下Ajax调用:

    var img = new Image(1,1);
    img.src = "http://example.com/clicks-receiver?" + query_string;
    
    var url = your_other_domain_url + "jsoncallback=?";
    var params = {param1:val1, param2:val2};
    $.ajax({
      type: 'POST',
      url: url,
      data: params,
      success: function(data){
                //success jsonp handler - assume content in data.response
                if(data.response){
                   //do something with the remote site content
                }
      },
      dataType: "json"
    });
    
    2) 在服务器端,跟踪具有参数“jsoncallback”的任何请求,并将响应放入json返回对象中,例如

    {status: 'success', response: "<html>.....resposne conent...</html>"}
    
    {状态:'success',响应:“…响应内容…”
    
    不可能使用iframe。父服务器可以看到iframe,iframe可以将脚本运行回另一台服务器,而无需跳转。我相信我们的omniture实现使用了这种方法

    上述img方法也是一种潜在的方法

    一篇关于它的老文章:

    还是别的


    传播这些东西是一种不好的方式吗?

    我可以,但有没有更优雅的解决方案。想知道google Do itBrowser怎么会不允许请求请求总是从客户端发送到服务器,但如果是http请求,响应可能不会显示在客户端上,因为XSS限制。但使用json封装服务器的响应将允许您在客户端页面上呈现代码(javascript和html)。如果您的客户端未知,您可能希望自己编写ajax调用,而不是使用jQuery,然后将代码存储在公共js文件中,并让用户将其作为脚本标记包含在页面中。无论哪种方式,检索跨域服务器数据的想法都是相同的。因此服务器可以覆盖跨域请求?实际上,响应是jsonCallBack({some:json}),实际上它是作为脚本标记实现的。这也意味着jsonp只支持GET。它工作的原因是对脚本标记没有限制。Jsonp脚本标记调用已知的javascript方法,这就是为什么它被包装在方法调用中。