我正在使用以下方法来尝试获取json(我只是通过两种方式来查看正在发生的事情。禁用任何一种方式只运行一种或另一种方法会让我犯同样的错误。)
var jqxhr = $.getJSON("http://exampleurl/stats.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function(data) { console.log(data); })
$.ajax({
url: "http://exampleurl/stats.json",
dataType: 'text json',
cache: false,
success: test
});
当我运行它时,我得到标准200 ok,但有错误。 (并没有解释,对象只有一个“错误”的statusText)。
我回来的JSON(通过tcpdump和wireshark)看起来像:
HTTP / 1.1 200确定
内容类型:application / json
内容长度:341
{“perIPUsage”:[{“10secWindow”:{ “bitsPerSecond”:904956.8, “bytes”:1131196, “秒”:10},“2secWindow”:{ “bitsPerSecond”:867056, “bytes”:216764, “秒”:2},“60secWindow”:{ “bitsPerSecond”:984093.8666666667, “bytes”:7380704, “秒”:60},“地址”:“0:0:0:0:0:0:0:1”}}}
哪个JsonLint说完全有效(并且您会注意到内容类型设置正确)。
我正在呼唤一个外部地址,所以我不能只是相对它(我已经听过为某些人修复它)。
我做错了什么?为什么一直认为我的有效json是错的?
答案 0 :(得分:0)
您正在使用dataType“text json”,它将尝试将文本转换为JSON。但你没有得到文字;你得到application/json
。所以只需使用dataType“json”,看看会发生什么。
答案 1 :(得分:0)
dataType用于指定返回数据的类型
dataType: 'text/html',
OR
dataType: 'json',
答案 2 :(得分:0)
有一个名为Same Origin Policy的内置限制来阻止来自浏览器的跨域Ajax请求。几乎所有浏览器都实现了这一点,这是一件好事。