请考虑以下javascript:
$.ajax({ url:'http://ichart.finance.yahoo.com/table.csv?s=GS&a=00&b=1&c=2010&d=08&e=3&f=2012&g=d&ignore=.csv', type:'get', dataType:'jsonp', success:function(data){ alert(data); } })
URL返回一个.csv文件,但是我指定了jsonp数据类型,因为这是一个跨域的ajax请求。没有该参数,我会收到“不允许原点”错误。
jsonp
由于我指定了jsonp数据类型,因此.csv文件不是JSON格式,所以ajax函数会引发错误。但是在开发控制台中,我可以看到浏览器确实收到了一个连贯的.csv文件。因此,我知道我已经成功接收了CSV文件。我认为应该可以,但是我不确定如何正确将这个csv文件接收到我的ajax函数中?
当然,如果我可以使此URL返回正确格式的JSON字符串,那将是最好的选择,但是我不确定是否可以这样做。
这是您可以尝试使用的小提琴,您必须打开开发控制台才能看到该错误:http : //jsfiddle.net/92uJ4/3/
任何帮助是极大的赞赏。
提姆
不幸的是,跨域限制意味着这根本行不通。该系统是专门构建的,因此您不能使用AJAX拉取任意跨域内容。没有任何形式的预解析方法可以将要获取的非JSONP数据转换为实际的JSONP数据(因为这会超出限制的要点)。
您将不得不打电话给从Yahoo!提取数据的本地服务器。并将其发送到您的AJAX请求,或者找到某种类型的服务,该服务将从任意URL中提取并以JSONP形式返回数据。碰巧的是,雅虎!提供这样的服务:YQL(雅虎查询语言)。有关更多详细信息,请参见此链接。
要完成所需的操作,请使用以下小提琴中的代码:http : //jsfiddle.net/c5TeM/1/
function get_url(remote_url) { $.ajax({ url: "http://query.yahooapis.com/v1/public/yql?"+ "q=select%20*%20from%20html%20where%20url%3D%22"+ encodeURIComponent(remote_url)+ "%22&format=json", type: 'get', dataType: 'jsonp', success: function(data) { alert(data.query.results.body.p); }, error: function(jqXHR, textStatus, errorThrow){ alert(jqXHR['responseText']); } }) }