【问题标题】:Error handling when there is no error?没有错误时的错误处理?
【发布时间】:2012-08-18 17:12:02
【问题描述】:

我有以下代码在页面上显示用户的邮政编码(如果您阅读过我最近提出的任何问题,它们都与此有关)。邮政编码通常会显示,除非在浏览器不支持地理定位的某些环境中。在这些情况下,页面不显示任何内容,也没有错误记录到控制台。

JS

function getZipCode(geolocation) {
    if (geolocation) {
        geolocation.getCurrentPosition(function (position) {
           $.getJSON(
               "http://ws.geonames.org/findNearestAddressJSON?callback=?",
                {
                    lat : position.coords.latitude,
                    lng : position.coords.longitude
                },
                function (data) {
                    $(function () {
                        $('#zip').text(data.address.postalcode);
                    });
                }
            );
        });
    }
}

HTML

<div id="zip"></div>

有什么方法可以处理这个错误并在脚本没有返回任何结果时显示错误信息?我正在考虑将文本放在 #zip 之间,但是浏览器支持它的用户会在加载时看到该文本,即使它会改变,这也会是一个糟糕的用户体验。

【问题讨论】:

    标签: javascript jquery error-handling


    【解决方案1】:

    您的脚本不会通过 if(地理位置)检查。

    简单地做

    if (geolocation) {
    //do stuff
    }
    else {
    //notify user that his browser doesnt have geolocation
    }
    

    【讨论】:

    • 一个不工作的示例浏览器是 Coda 内部的浏览器。我只假设它没有加载邮政编码,因为地理定位不受支持,但在尝试了你的建议和一些简单的console.logs 之后,它实际上允许地理定位,但它不显示邮政编码。您对为什么会发生这种情况以及我如何处理错误有什么想法吗?
    • 你得到了位置,JSON调用返回了吗?
    • 编辑:我发现发生这种情况的一个例子是在计算机上关闭位置服务时。支持地理位置,但位置服务已关闭。
    【解决方案2】:

    geolocation.getCurrentPosition() 采用可选的errorCallback 参数。使用它来显示错误。

    【讨论】:

    • 使用errorCallback 的例子是什么?看起来我遇到的问题有1: User denied location的错误。
    • 请参阅dev.w3.org/geo/api/spec-source.html 并搜索 errorCallback 和 positionError 以获取示例和详细文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2014-09-12
    相关资源
    最近更新 更多