0

我一直在尝试通过 ajax 从另一个站点访问数据,但失败了。这种情况是,如果我通过表单将数据发布到站点,那么我将被重定向到该站点并显示正确的数据。我想要做的是我希望我的脚本使用 ajax 获取该数据。我想澄清一件事,我不能修改服务器端的脚本,以便我可以添加Access-Control-Allow-Origin标题。

他们有什么诡计或黑客行为让我得到数据???

$(document).ready(function(){
                $.ajax({
                    type: 'POST',
                    url: 'http://somedomain.com/FlightStatus.aspx',
                    data: {ArrFltStatus:'KDU',DepFltStatus:'ISB',DropDownDay:'today',Submit:'Proceed'},
                     success: function(data){
                        alert(data);
                    },
                    error:function(xhr,err){
                        alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status);
                        alert("responseText: "+xhr.responseText);
                    }
                });
            });
4

4 回答 4

2

如果他们有 JSONp 接口,请使用它(但不适用于 POST)。

否则,您需要在服务器上执行远程访问的代理脚本,以便您的 JavaScript 可以访问同一域上的资源。

于 2012-05-05T12:08:27.837 回答
0

请求跨域资源时,您应该在 ajax 选项中使用 dataType: 'jsonp' 属性。

于 2012-05-05T12:06:13.923 回答
0

当我使用脚本在本地 macine 上检索数据时,我也遇到了同样的问题,但是当我将调用脚本上传到请求数据的服务器上时,我得到了这个正常工作......

这是因为域安全,这不允许我从托管服务器检索数据..

于 2012-05-05T12:27:45.800 回答
0

跨域请求只能用JSONP,而JSONP只支持GET,而$.ajax默认是GET,所以根本不需要设置类型:

$.ajax({
   url: 'http://somedomain.com/FlightStatus.aspx',
   data: {ArrFltStatus:'KDU',DepFltStatus:'ISB',DropDownDay:'today',Submit:'Proceed'},
   dataType : 'jsonp',
}).done(function(data) {
     alert(data);
});

JSONP 不会触发错误处理程序,因此也不需要使用它。

如果您请求数据的服务不支持 JSONP,您可以使用 Yahoo 的 YQL 设置一个管道,让您以 JSONP 格式获取数据。

于 2012-05-05T12:40:57.777 回答