代码之家  ›  专栏  ›  技术社区  ›  Starx

跨站点AJAX请求

  •  0
  • Starx  · 技术社区  · 14 年前

    我正试图构建的是一个界面,用户可以通过它向我的站点发送post请求并在浏览器上显示响应。

    例如

    $.post(
         'http://www.mysite.com/thirdpartyrequest.php',
         { param1: value1, param2: value2 },
         function(data) {
             $("#universalid").html(data);//Update with the response
         }
    );
    //however it is not allowed.
    

    知道怎么做这样的跨站点Ajax请求吗

    1 回复  |  直到 14 年前
        1
  •  4
  •   Martin Algesten    14 年前

    最好的办法是使用JSONP。退房:

    http://api.jquery.com/jQuery.getJSON/

    http://en.wikipedia.org/wiki/JSON

    如果服务器提供以下数据:

    http://my.server.com/somedata.json
    
    {
       'some': ['fancy', 'json' ],
       'structure: 'here'
    }
    

    您可以通过在请求url中提供回调参数将其转换为jsonp—实际上,它的标准名称是 callback . 然后在服务器上,您需要检查这个参数并将结果包装在那个回调函数中(有效地将其转换为javascript而不是json)。

    http://my.server.com/somedata.json?callback=receive_this
    
    receive_this({
       'some': ['fancy', 'json' ],
       'structure: 'here'
    });
    

    (对于niggly,json的响应mime类型应该是 application/json 而对于jsonp来说 application/javascript )

    客户机现在(概念上)将加载json,如下所示:

    <script type="text/javascript">
    
       var receive_this = function(json) {
    
         // do some stuff with data here.
    
       };
    
    </script>
    
    <script type="text/javascript" src="http://my.server.com/somedata.json?callback=receive_this"></script>
    

    实际上,您可以使用jQuery之类的东西将jsonp请求脚本标记动态插入DOM。jQuery默认调用回调请求参数 回拨 .

    $.ajax({
      url: 'http://my.server.com/somedata.json',
      dataType: 'jsonp',
      success: receive_this
    });