찾다

 >  Q&A  >  본문

javascript - ajax能跨域post吗?

因为目前的项目需要ajax跨域向另一台服务器传大量值,目前跨域ajax也只有$.getJSON的形式,GET貌似不能满足传大量数据的要求,想问一下牛人怎样ajax跨域post

大家讲道理大家讲道理2895일 전702

모든 응답(8)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦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));
    

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-10 13:11:44

    通过 CORS 可以跨域。比如 a.com 想 post 到 b.com 下,那么你需要在 b.com 的服务器上进行 CORS 设置,允许 a.com 跨域请求。手机码字困难,所以 CORS 具体内容请自行谷歌。

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 13:11:44

    跨域POST?其实不是很懂这个术语就是,一般表单POST什么的不就可以向非同域名的地址做POST么?如果不要返回值的话用AJAX做POST也没问题吧。

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-10 13:11:44

    能,不过如果 post 的是非表单类型的内容的话,需要进行「preflighted requests」,有点麻烦。详见 MDN: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-10 13:11:44

    首先你的另外一台服务器需要做好CORS设置, 然后你的JS代码如下

    $.ajax({
        url: a_cross_domain_url,
        crossDomain: true,
        method: "POST"
    });
    

    회신하다
    0
  • 迷茫

    迷茫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.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-10 13:11:44

    是的,仅仅POST数据的话,form表单本来就支持跨域。
    不过最新的 XMLHttpRequest2.0 有非常大的改进,其中之一就是对于跨域 ajax 的处理。

    회신하다
    0
  • 黄舟

    黄舟2017-04-10 13:11:44

    都别闹了。

    用Apache做转发(逆向代理),让跨域变成同域,这才是最好的解决方案。

    原因:
    1.如果不做转发,服务端与客户端js都需要改动代码,专门为跨域写很多额外的代码,增大工作量。而且不跨域时,这些代码根本就用不着。做了转发,服务端与客户端,都不需要做任何改动。

    2.做转发,开发时,可以让客户端js直接访问VS、Eclipse,来调试,很方便。部署后,把转发切到IIS或Tomcat上去,做切换只是几秒钟的事情。

    3.转发非常容易做,在Win上装一个wamp,然后花几分钟配置一下Apache,转发就做好了。如果不做转发,服务端与客户端要改动大量代码,太费时。

    회신하다
    0
  • 취소회신하다