如何使用 HTML5 Geolocation API 实现承诺?

2024-02-03

我怎样才能更正下面的代码,使其不返回undefined的值getPreciseLocation功能?

总之,当用户点击时,应该有一个 AJAX 调用来获取当前天气#precise-location-prompt并与浏览器共享位置。然而目前有一个undefined用户点击后立即出现值错误#precise-location-prompt.

// Get weather data for the current location
function getCurrentWeather(coordinates) {
  return $.ajax('http://www.example.com/lat=' + coordinates[0] + '&lon=' + coordinates[1]);
}

// Show weather in DOM
function showCurrentWeather(data) {
  var currentTemperature = data.temperature;
  $('#current-temperature').text(currentTemperature);
}

// Get precise location based via the Geolocation API
function getPreciseLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(displayPosition, displayError);
  } else {
    console.log("Geolocation is not supported by this browser");
  }
}

// Success function for the Geolocation API
function displayPosition(position) {
  return [position.coords.latitude, position.coords.longitude];
}

// Error function for the Geolocation API
function displayError(error) {
  console.log('Precise location is not available at the moment.');
}

// Promises chain with the AJAX requests
function getWeatherWrapper() {
  return getPreciseLocation().then(function(locationData) {
    return getCurrentWeather(locationData);
    }).then(function(weatherData) {
      return showCurrentWeather(weatherData);
    });
}

// User's interaction with the website
$('#precise-location-prompt').on('click', getWeatherWrapper);

该演示使用 JSfiddle AJAX 方法(奇怪的是,它使用 Mootools)来模拟请求,但您可以在$.ajax方法。在这个测试中,我还用普通 JS 事件侦听器和选择器替换了 jQuery 的其余部分,但您可以非常轻松地将它们添加回您的代码中。

返回一个新的承诺,该承诺在success打回来。

function getCurrentWeather(coordinates) {
  return new Promise(function (resolve, reject) {
    new Request.JSON({
      url: '/echo/json/',
      data: {
        json: JSON.encode({ temperature: 'Too hot!' }),
        delay: 1
      },
      onSuccess: function (response) {
        resolve(response);
      }
    }).send();
  });
}

function showCurrentWeather(data) {
  var temp = document.getElementById('current-temperature');
  temp.textContent = data.temperature;
}

返回一个承诺,当你原来的displayPosition被称为。我将该函数添加回getPreciseLocation因为它更容易发挥作用。您还可以在此处重新添加对地理位置的检查,以及reject如您认为合适。

function getPreciseLocation() {
  return new Promise(function (resolve, reject) {
    navigator.geolocation.getCurrentPosition(function (position) {
      resolve([position.coords.latitude, position.coords.longitude]);
    });
  });
}

在这里,我们只是减少代码占用量,以使用适当的数据调用相关函数。

function getWeatherWrapper() {
  getPreciseLocation()
    .then(getCurrentWeather)
    .then(showCurrentWeather);
}

var prompt = document.getElementById('precise-location-prompt');
prompt.addEventListener('click', getWeatherWrapper);

DEMO https://jsfiddle.net/4a59k1tz/11/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 HTML5 Geolocation API 实现承诺? 的相关文章

  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 文件上传控件 OnChange 事件 JQuery

    我正在尝试使用 AJAX JQUERY 和 Net HTTPHandler 构建页面来上传文件 如下所示http dotnet dzone com news async file upload jquery and http dotnet
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Jquery 验证不能正确验证数字?

    我在使用 jquery 非侵入式验证验证数字时遇到问题 我使用的版本是 ASP NET MVC 3 jQuery 1 9 1 jQuery 用户界面 1 10 1 JQuery 验证 1 11 0 我试图验证的输入是
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 加快 Visual Studio 2005 中的编译速度

    对于主要包含 C 项目的解决方案 在 Visual Studio 2005 中加快编译时间的最佳方法是什么 除了预编译标头之外 还有许多其他事情可能会减慢您的速度 病毒检查软件 可能会对构建产生严重影响 如果您正在运行病毒检查程序 请尝试将
  • k-means 的时间复杂度是多少?

    我正在经历k means 维基百科页面 http en wikipedia org wiki K means clustering 根据算法 我认为复杂度是O n k i n 总元素 k 簇迭代次数 那么有人可以向我解释一下维基百科上的这个
  • 没有 pyvenv.cfg 文件

    我做了一个变量cfg waterot cfg然后创建一个新文件 waterot cfg 在 pycharm 中 这会自动生成一个pyvenv cfg文件 我不知道这是什么 我的代码出现错误 我删除了pyvenv cfg文件并更改自 cfg
  • getRootNav() 和 navCtrl() 方法之间的差异

    你能告诉我以下两种方法有什么区别吗 我应该在哪个时刻使用它 book ts this app getRootNav push FromBook bookId this data id this navCtrl push FromBook b
  • 使用 Flask-Security 为每个用户提供唯一的 Salt

    在阅读了一些有关对密码加盐的信息后 似乎最好为每个用户使用唯一的盐 我正在努力实现 Flask Security atm 从文档中看来 您只能设置全局盐 即 SECURITY PASSWORD SALT thesalt 问题 如何为每个密码
  • 如何返回所有列名称/标题(并避免“TypeError:table.columns(...).names不是函数”)?

    我有一个非常相似的问题this one https stackoverflow com questions 24325786 table columns is not a function in datatable js 我创建一个数据表
  • 如何为子图绘制动画图例?

    我想用 ArtistAnimation 绘制动画子图 不幸的是 我不知道如何拥有一个动画传奇 我尝试了在 StackOverflow 上找到的不同方法 如果我设法获得图例 它不是动画的 而只是所有动画步骤的图例 我的代码如下所示 impor
  • 如何在 Express 应用程序中使用通过 npm 安装的 jQuery?

    我有一个 Node js Express 应用程序 并使用 npm 安装了 jQuery in the app js我使用的文件 var jquery require jquery 在 html 文件头中 我包含了使用 jQuery 的 j
  • Android 中未应用 CSS 旋转(phonegap)

    我正在phonegap 中构建一个Android 应用程序 但我遇到了使用CSS 旋转div 的问题 我在这里发现了类似的问题 CSS 旋转未应用于 Android 4 0 webview https stackoverflow com q
  • 路线变更转场效果

    我想知道你们中是否有人在Angular2中实现了Router过渡效果 我想主要使用CSS 到目前为止 我已经摆脱了不需要的状态 并在我的视图中添加了一些 CSS 技巧 以欺骗用户存在状态更改 但这种方法不会让我有任何结果 我具体寻找的是重叠
  • 在 Go 中将 UTC 转换为“本地”时间

    如何将 UTC 时间转换为当地时间 我已经为我需要当地时间的所有国家 地区创建了一张具有 UTC 差异的地图 然后 我将该差异作为持续时间添加到当前时间 UTC 中 并打印结果 希望这是该特定国家 地区的当地时间 由于某些原因 结果是错误的
  • msbuild 无法发布的项目

    我有一个 vbproj 它是一个 VB NET Web 应用程序项目 我可以构建包含该项目的解决方案 然后右键单击该项目并在本地发布 VS 2013 专业更新 3 没有问题 我正在尝试构建这个解决方案 然后使用 Jenkins CI 中的
  • 高性能应用程序中的 C/C++ 与 Java/C#

    我的问题是关于 Java 与编译代码的性能对比 例如高性能数值应用程序中的 C fortran 汇编 我知道这是一个有争议的话题 但我正在寻找具体的答案 示例 还有社区维基 我以前曾问过类似的问题 但我认为我提出的问题很宽泛 但没有得到我想
  • 如何将 shell 脚本移植到 Perl?

    这是一个 shell 脚本 我如何在 Perl 中完成同样的事情 prfile sqllib db2profile profile if f prfile prfile then prfile else read p Enter a val
  • 如何在移动视图中显示输入类型数字的向上/向下箭头?

    对于输入类型数字 可以轻松显示 Web 视图中输入框右侧的向上 向下箭头 我还阻止了输入的默认输入 因此您被迫使用箭头来增加 减少数字 但箭头不会显示在移动视图中 有没有什么方法可以强制移动视图中的箭头 以便用户不会输入数字而是使用增量 减
  • AdMob 广告未在 iOS 中展示

    过去几天 iOS 版本没有展示 AdMob 广告 它曾经有效 我没有改变任何东西 iOS 9 3 5 IDE NetBeans 8 0 2 CodenameOne 插件 3 5 2 操作系统 Windows 7 Google 弃用了旧的 a
  • 当它说将 crossdomain.xml 放在根目录中时,它会在 IIS 上的什么位置?

    是 wwwroot C 托管资产的根虚拟目录 还是资产所在的同一文件夹 意思是 如果我有一个虚拟目录 virdir 和一个子目录 swf 它实际上就像 C somedir assets swf 那么 crossdomain xml 需要放在
  • Visual C++:checked_array_iterator 有什么用?

    关于编译代码4 级警告 W4 I get C4996 http msdn microsoft com en us library ttcz0bys aspx警告std copy 参数为 C 数组 不是向量等 STL 容器 的调用 解决此问题
  • 谷歌如何通过两步验证识别“可信设备”

    假设您已注册您的设备 当您返回网站时 它使用哪些信息来验证您是否在该设备上 它是否在您的计算机上存储某些内容 例如 cookie 或者是否使用其他算法来确定您从何处登录 它存储有关您与服务器对话的各种信息 SSL cookie 会话数据 例
  • 如何使用 HTML5 Geolocation API 实现承诺?

    我怎样才能更正下面的代码 使其不返回undefined的值getPreciseLocation功能 总之 当用户点击时 应该有一个 AJAX 调用来获取当前天气 precise location prompt并与浏览器共享位置 然而目前有一