Javascript 在Firefox和Chrome中使用jQuery获取JSON结果时出现问题(IE8可用)
我试图使用jQuery解析JSON,但遇到了一些问题。使用下面的代码,数据总是返回空值:Javascript 在Firefox和Chrome中使用jQuery获取JSON结果时出现问题(IE8可用),javascript,jquery,json,parsing,Javascript,Jquery,Json,Parsing,我试图使用jQuery解析JSON,但遇到了一些问题。使用下面的代码,数据总是返回空值: <!DOCTYPE html> <html> <head> <title>JSON Test</title> </head> <body> <div id="msg"></div> <script src="http://code.jquery.com/jqu
<!DOCTYPE html>
<html>
<head>
<title>JSON Test</title>
</head>
<body>
<div id="msg"></div>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$.ajax({
url: 'http://datawarehouse.hrsa.gov/ReleaseTest/HGDWDataWebService/HGDWDataService.aspx?service=HC&zip=20002&radius=10&filter=8357&format=JSON',
type: 'GET',
dataType: 'json',
success: function(data) {
$('#msg').html(data[0].title); // Always null in Firefox/Chrome. Works in IE8.
},
error: function(data) {
alert(data);
}
});
</script>
</body>
</html>
如果我用Flickr API URL()替换我的URL,我会得到一个可以使用的有效JSON结果
我已经在上成功地验证了我的JSON,所以对于我可能做错了什么,我已经没有什么想法了
有什么想法吗
更新:我让客户端将内容类型切换为application/json。不幸的是,我仍然遇到同样的问题。我还更新了我的HTML,并加入了我一直在使用的实时URL
更新2:我刚刚在IE8中尝试了一下,效果很好。出于某种原因,它在Firefox 3.6.3或Chrome 4.1.249.1064(45376)中都不起作用。我确实注意到返回的数据有一个错误(开发人员返回的是一组数据,即使查询总是返回一条记录),但我仍然不明白为什么它在其他浏览器中不起作用
请注意,我是从本地文件系统上的HTML文件工作的,这一点可能很重要。我认为这可能是XSS的问题,但这并不能解释为什么Flickr可以工作。您考虑过使用更灵活的$.ajax吗?我将在这里进行分解,看看默认的$.getJSON是否没有提供您所需要的内容
$.ajax({
url: 'results.json',
type: 'GET',
dataType: 'json',
success: function(data, status)
{
alert(data);
}
});
将是等效的ajax“父级”实现。试着到处乱搞,看看是否有一个特定的属性需要设置 您是否考虑过使用更灵活的$.ajax?我将在这里进行分解,看看默认的$.getJSON是否没有提供您所需要的内容
$.ajax({
url: 'results.json',
type: 'GET',
dataType: 'json',
success: function(data, status)
{
alert(data);
}
});
将是等效的ajax“父级”实现。试着到处乱搞,看看是否有一个特定的属性需要设置 如果一个url(flickr url)有效,而另一个url无效(你自己的),我会说问题在于你的url
看起来您使用的是相对路径,这是您的意图吗?您是否使用firebug的网络面板查看请求的外观?如果一个url(flickr url)有效,而另一个url无效(您自己的),我会说问题在于您的url
看起来您使用的是相对路径,这是您的意图吗?您是否使用firebug的网络面板查看请求的外观?是作为“应用程序/json”提供的内容?是作为“应用程序/json”提供的内容?Flickr的API支持,而您连接的内容不支持
jQuery看到了=?
,了解到有一个JSONP回调请求,并创建了一个。您可以在示例页面使用的jQuery库的第5003行看到它
所以,你需要改变两件事
cb
,那么将其添加到AJAX请求中:&cb=?
(这样我们就可以让jQuery为我们处理回调的创建)=?
,了解到有一个JSONP回调请求,并创建了一个。您可以在示例页面使用的jQuery库的第5003行看到它
所以,你需要改变两件事
cb
,那么将其添加到AJAX请求中:&cb=?
(这样我们就可以让jQuery为我们处理回调的创建)这是一个跨域请求错误的案例。Flickr工作,因为它是JSONP,而另一个url不工作,因为它没有启用JSONP。 1.检查url是否支持JsonP 2.如果没有,请在本地域(与网页所在的域相同)中创建代理web服务
3.调用代理Web服务,代理Web服务从服务器端调用外部url。这是跨域请求错误的情况。Flickr工作,因为它是JSONP,而另一个url不工作,因为它没有启用JSONP。 1.检查url是否支持JsonP 2.如果没有,请在本地域(与网页所在的域相同)中创建代理web服务
3.调用代理Web服务,代理Web服务从服务器端调用外部url。响应代码是什么?您可以尝试切换到
$.ajax()
调用并检查调用中的错误吗?响应代码是什么?您能否尝试切换到$.ajax()
调用并检查调用中的错误?这是一个很好的问题。我的猜测是否定的(我的一个客户编写了JSON服务)。我得调查一下。我几乎可以肯定这就是答案。刚刚选中,其内容类型为:application/atom+xml;charset=utf-8。问得好。我的猜测是否定的(我的一个客户编写了JSON服务)。我得调查一下。我几乎可以肯定这就是答案。刚刚选中,其内容类型为:application/atom+xml;charset=utf-8。如果我在Firebug的网络面板上查看Response选项卡,我只会在使用Flickr URL时看到JSON格式的数据。否则,响应流似乎是空的。如果我通过telnet连接到端口80并手动执行GET,我会看到预期的结果。如果我在Firebug中查看网络面板上的响应选项卡,我只会在使用Flickr URL时看到JSON格式的数据。否则,响应流似乎是空的。如果我通过telnet连接到端口80并手动执行GET,我确实会看到预期的结果。那么为错误案例添加一个处理程序,看看是否发生了这种情况呢?这实际上是我以前从未听说过的事情。我恳求