我一直在尝试通过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);
}
});
});
答案 0 :(得分:2)
如果他们有JSONp接口,请使用它(虽然这不适用于POST)。
否则,您需要在服务器上执行远程访问的代理脚本,以便您的JavaScript可以访问同一域中的资源。
答案 1 :(得分:0)
在请求跨域资源时,您应该在ajax选项中使用dataType:'jsonp'属性。
答案 2 :(得分:0)
当我使用脚本在本地macine上检索数据时,我也遇到了同样的问题,但是当我在我请求数据的服务器上上传调用脚本时,我的工作正常...
这是因为域安全性,它不允许我从托管服务器检索数据..
答案 3 :(得分: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格式获取数据。