【问题标题】:Sending big data to server, Cross-Domain将大数据发送到服务器,跨域
【发布时间】:2010-01-21 17:32:00
【问题描述】:

我正在尝试从我的应用所在的许多不同服务器向我的服务器发送大块数据。
使用一些虚拟图像源,将我的数据作为 GET 查询传递。 (img.gif?aaa=xxx&bb=yyy...)
Query 多次太长并被剪切。

有没有更好的方法让我跨浏览器发送数据?

【问题讨论】:

    标签: javascript ajax cross-domain


    【解决方案1】:

    发送数据时最好使用 POST 方法。

     var msgSender = new ActiveXObject("Microsoft.XMLHTTP"); 
     msgSender.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     msgSender.setRequestHeader("Encoding", "Windows-1257")     
     msgSender.open("POST", "http://yourderver/page" ,true);
     msgSender.onreadystatechange = function(){...};
     var msg = "your very long message goes here";
    
     //preparing post data
     var strToSend = "someotherarg=somevalue" + username;
         strToSend+= "&msg=" + msg;
     strToSend = escape(strToSend);
     msgSender.send(strToSend);
    

    如果您使用 jQuery,解决方案会更简单 - 只需调用 $.post() 方法:http://docs.jquery.com/Ajax/jQuery.post

    编辑: 但是,这不会跨域工作,除非您在服务器上指定 'Access-Control' 标头并且客户端具有现代 enouhg 浏览器(FireFox 3.5+ 等)

    因此,另一种解决方案是在您的页面中包含一个隐藏的 IFRAME(该页面位于您的服务器上),其中包含一个表单,然后您调用该表单的 Submit() 来发布数据。

    【讨论】:

    • 隐藏 iframe?如果查询太长,数据将如何进入 iframe?无论如何,这将是每次 2 个 HTTP 请求......
    • 如果 iframe 来自您的域,您可以使用 javascript 访问其 DOM! document.getElementById("yourframe").document.forms[0].submit() 等等!
    • 我知道,但正如我已经说过的,数据是跨域的。就是这个。 iframe 技巧不会有一点帮助..
    • 将普通的 HTML 表单提交到与您不同的域没有问题!或者......我没有得到问题吗?
    • 那么你为什么在编辑中说“页面存在于你的服务器上”......我喜欢你的 iframe 想法 :)
    【解决方案2】:

    拆分您的有效负载(例如 1024 字节),然后使用多个 GET 请求发送。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2013-07-29
    • 2011-11-28
    相关资源
    最近更新 更多