考虑以下内容。
示例:https://jsfiddle.net/Twisty/yft97sme/
JavaScript
$(function() {
$.widget("app.serverTime", {
options: {
server: "https://worldtimeapi.org/api/ip",
showLabel: true,
labelValue: "Server Time:"
},
_create: function() {
var self = this;
self.element.addClass("ui-server-time ui-widget");
if (self.options.showLabel) {
$("<label>", {
class: "ui-server-time-label",
style: "margin-right: 5px;"
}).html(self.options.labelValue).appendTo(self.element);
}
$("<span>", {
class: "ui-server-time-display"
}).appendTo(self.element);
$("<button>", {
class: "ui-server-time-refresh",
style: "margin-left: 5px;"
}).html("Refresh").button({
icon: "ui-icon-arrowreturnthick-1-s",
showLabel: false
}).click(function() {
self.getTime();
}).hide().appendTo(self.element);
self.getTime();
},
_log: function(str) {
console.log(Date.now(), str);
},
_serverTime: null,
_collectTime: function() {
var self = this;
self.beforeGetTime();
$.ajax({
cache: false,
type: "get",
url: this.options.server,
success: function(results) {
self._log("Collected Time: " + results.unixtime);
self._setTime(results);
}
});
},
_setTime: function(obj) {
this._log("Time Setter");
this._serverTime = obj
},
_getTime: function() {
this._log("Time Getter");
var dt = new Date(this._serverTime.datetime);
$(".ui-server-time-display", this.element).html(dt.toString());
$(".ui-server-time-refresh", this.element).show();
return this._serverTime;
},
beforeGetTime: function() {
this._log("Before Get Time");
},
getTime: function() {
this._collectTime();
this._delay(this._getTime, 500);
},
_destroy: function() {
this.element.children().remove();
this.element.removeclass("ui-server-time");
}
});
$(".clock").serverTime({
showLabel: false
});
});
如果您在创建小部件时运行 GET,它将显示从那一刻起的服务器时间。如果服务器响应缓慢,也会延迟创建。我建议将时间的集合转移到它自己的功能上。这样您就可以随时调用它。
假设您的 PHP 脚本可能返回不同的值,您可能需要调整结果处理。