6

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 提要的标头是最新的,并且提要肯定提供有效的 JSON(它有效地缓存了第 3 方服务提要以节省 API 成本)。

4

3 回答 3

6

您看到此错误的原因:

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 字符串有效性的一种非常快速且简单的方法。

于 2013-01-20T13:17:00.817 回答
4

我今天遇到了同样的问题。在我的例子中,我将一个 JSON 对象分配给一个名为“location”的变量,该变量是Windows 下 JavaScript中的保留字,并且显然是 windows.location 的简写!因此,浏览器重定向到当前 URL,并附加了 [object%20Object]。如果同样的事情发生在您身上,只需使用“位置”以外的变量名称。希望这可以帮助某人。

于 2014-11-11T19:44:35.347 回答
0

查看实际的函数用法:

http://api.jquery.com/jQuery.getJSON/

您不能将对象参数传递给$.getJSONlike with $.ajax,您的代码应如下所示:

    jQuery.getJSON('api_location + '?location=' + user_location)
         .done(function() {
            //success here
         })
         .fail(function() {
           //fail here
         });

为了让它更清楚一点,$.getJSON它只是一个最终调用的“包装函数$.ajax{type:'get',dataType:'JSON'}。您可以在我上面提供的链接中看到这一点。

于 2013-01-19T22:58:00.253 回答