Rumah > Soal Jawab > teks badan
因为目前的项目需要ajax跨域向另一台服务器传大量值,目前跨域ajax也只有$.getJSON的形式,GET貌似不能满足传大量数据的要求,想问一下牛人怎样ajax跨域post
伊谢尔伦2017-04-10 13:11:44
跨域ajax浏览器的兼容性不好解决
jsonp只能GET
跨域POST从来都是可以的
构造<form>
表单想action给谁都可以
跨域POST,并且想得到返回结果,需要对方服务器做一些配合
思路:
== a.com/post.html ==
<script>
function postcallback(data){
}
</script>
<form action="http://b.com/api.php" method="post" target="ifr-result"><input ....></form>
<iframe name="ifr-result"></iframe>
== a.com/ifr-callback.php ==
<?php
header('Content-type: text/javascript');
echo '<script>';
//回调原页面上函数处理返回结果
echo 'window.top.postcallback(' .$_GET['data']. ');';
echo '</script>';
== b.com/api.php ==
<?php
//....
$data = '{"ret":0,"msg":"ok"}';
// ** 让结果跳转到a.com域 **
header("Location: http://a.com/ifr-callback.php?data=".urlencode($data));
怪我咯2017-04-10 13:11:44
通过 CORS 可以跨域。比如 a.com 想 post 到 b.com 下,那么你需要在 b.com 的服务器上进行 CORS 设置,允许 a.com 跨域请求。手机码字困难,所以 CORS 具体内容请自行谷歌。
伊谢尔伦2017-04-10 13:11:44
跨域POST?其实不是很懂这个术语就是,一般表单POST什么的不就可以向非同域名的地址做POST么?如果不要返回值的话用AJAX做POST也没问题吧。
ringa_lee2017-04-10 13:11:44
能,不过如果 post 的是非表单类型的内容的话,需要进行「preflighted requests」,有点麻烦。详见 MDN: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
高洛峰2017-04-10 13:11:44
首先你的另外一台服务器需要做好CORS设置, 然后你的JS代码如下
$.ajax({
url: a_cross_domain_url,
crossDomain: true,
method: "POST"
});
迷茫2017-04-10 13:11:44
easyXDM是不是可以实现?http://easyxdm.net/wp/
easyXDM is a Javascript library that enables you as a developer to easily work around the limitation set in place by the Same Origin Policy, in turn making it easy to communicate and expose javascript API’s across domain boundaries.
天蓬老师2017-04-10 13:11:44
是的,仅仅POST数据的话,form表单本来就支持跨域。
不过最新的 XMLHttpRequest2.0 有非常大的改进,其中之一就是对于跨域 ajax 的处理。
黄舟2017-04-10 13:11:44
都别闹了。
用Apache做转发(逆向代理),让跨域变成同域,这才是最好的解决方案。
原因:
1.如果不做转发,服务端与客户端js都需要改动代码,专门为跨域写很多额外的代码,增大工作量。而且不跨域时,这些代码根本就用不着。做了转发,服务端与客户端,都不需要做任何改动。
2.做转发,开发时,可以让客户端js直接访问VS、Eclipse,来调试,很方便。部署后,把转发切到IIS或Tomcat上去,做切换只是几秒钟的事情。
3.转发非常容易做,在Win上装一个wamp,然后花几分钟配置一下Apache,转发就做好了。如果不做转发,服务端与客户端要改动大量代码,太费时。