gpt4 book ai didi

javascript - Sammy.js 路由 : How to wait for a library to be loaded before routing

转载 作者:行者123 更新时间:2023-12-03 08:50:43 25 4
gpt4 key购买 nike

我目前正在构建一个基于 Google Cloud Endpoints (REST Api) 的单页应用程序,该应用程序使用 Sammy.js 进行路由。

简介

为了能够使用端点,我需要通过在 HTML 页面末尾添加以下脚本标记来加载 Google javascript 库:

<script src="https://apis.google.com/js/client.js?onload=init"></script>

在“init”回调函数中,我必须加载我的端点。请参阅https://cloud.google.com/appengine/docs/java/endpoints/consume_js了解更多详情。

我有一个 Sammy 路线,它显示来自端点的项目列表,通过:

this.get('#/listAllItems', function () {
listItems(); // function which calls the Endpoint and displays the results
});

问题

当我从页面中的按钮(或菜单项)调用此路由时,没有问题,因为 Google javascript 库以及端点已经加载。

但是,当我直接通过浏览器的地址栏调用此路由时,我收到 500 错误,因为 javascript 库在触发路由之前没有时间加载。

body 500 Error get /page.html#/listAllItems gapi.client is undefined

我找到了一个解决方案,方法是等待库(和端点)加载,然后使用下面的代码调用端点。但我觉得这不是很优雅,可能有一些更好/更有效的方法来处理这个问题。

this.get('#/listAllItems', function () {
function checkGapi() {
if ((gapi.client) && (gapi.client.myEndpointApi)) {
listItems();
} else {
window.setTimeout(checkGapi, 50);
}
}
checkGapi();
});

非常欢迎任何建议,提前致谢!

最佳答案

在加载所有 api 时调用 Sammy.run() 应该可以解决问题。例如

var app = Sammy(...);
function init() {
app.run();
}

关于javascript - Sammy.js 路由 : How to wait for a library to be loaded before routing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32682147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com