我正在尝试使用getJSON
方法获取我使用jQuery编写的自定义JSON提要。由于未知原因,URL似乎从末尾剥离cache_gen.php?location=PL4
并替换为[object%20Object]导致404错误发生。
这是我正在使用的jQuery:
var fetchData = function() {
if (Modernizr.localstorage) {
var api_location = "http://weatherapp.dev/cache_gen.php";
var user_location = "PL4";
var date = new Date();
console.log(api_location + '?location=' + user_location);
jQuery.getJSON({
type: "GET",
url: api_location + '?location=' + user_location,
dataType: "json",
success: function(jsonData) {
console.log(jsonData);
}
});
} else {
alert('Your browser is not yet supported. Please upgrade to either Google Chrome or Safari.');
}
}
fetchData();
从控制台日志中我可以看到URL字符串的计算正确为:http://weatherapp.dev/cache_gen.php?location=PL4
然而,控制台中的第二行是:Failed to load resource: the server responded with a status of 404 (Not Found)
。
有人能指出我正确的方向吗?
更新19/01/2013 23:15
好吧,我刚刚转换,因此使用$.ajax
完全符合文档。我还添加了一个失败事件并记录了传递给它的所有数据。
var fetchData = function() {
if (Modernizr.localstorage) {
var api_location = "http://weatherapp.dev/cache_gen.php";
var user_location = "PL4";
var date = new Date();
var url = api_location + '?location=' + user_location;
console.log(url);
jQuery.ajax({
type: "GET",
url: api_location + '?location=' + user_location,
dataType: "json",
success: function(jsonData) {
console.log(jsonData);
},
error: function( jqXHR, textStatus, errorThrown ) {
console.log('textStatus: ' + textStatus );
console.log('errorThrown: ' + errorThrown );
console.log('jqXHR' + jqXHR);
}
});
} else {
alert('Your browser is not yet supported. Please upgrade to either Google Chrome or Safari.');
}
}
fetchData();
在此之后,我的控制台向我提供了以下信息:
http://weatherapp.dev/cache_gen.php?location=PL4
download_api.js:44textStatus: parsererror
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string
download_api.js:46jqXHR[object Object]
我确保JSON Feed的标头是最新的,并且Feed绝对提供有效的JSON(它有效地缓存第三方服务Feed以节省API的成本)。
答案 0 :(得分:5)
您看到此错误的原因:
http://weatherapp.dev/cache_gen.php?location=PL4
download_api.js:44textStatus: parsererror
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string
download_api.js:46jqXHR[object Object]
是因为您的JSON无效。即使响应正确地从服务器返回,如果您的dataType是'json'并且返回的响应没有正确格式化JSON,jQuery将执行错误函数参数。
http://jsonlint.com是验证JSON字符串有效性的一种非常快速简便的方法。
答案 1 :(得分:2)
我今天遇到了同样的问题。在我的例子中,我将一个JSON对象分配给名为'location'的变量,该变量是JavaScript under Windows中的保留字,并且显然是windows.location的简写!因此浏览器重定向到当前URL,并附加[object%20Object]。如果您遇到同样的事情,只需使用“位置”以外的变量名称。希望这有助于某人。
答案 2 :(得分:0)
查看实际的功能用法:
http://api.jquery.com/jQuery.getJSON/
您无法像$.getJSON
一样将对象参数传递到$.ajax
,您的代码应如下所示:
jQuery.getJSON('api_location + '?location=' + user_location)
.done(function() {
//success here
})
.fail(function() {
//fail here
});
为了使它更清晰一点,$.getJSON
只是一个“包装函数”,最终用$.ajax
调用{type:'get',dataType:'JSON'}
。您可以在我上面提供的链接中看到这一点。