我们加载一个iframe,其内容由第三方提供商控制。用户执行所需的操作。可能需要1到15分钟。一旦操作完成,第三方提供商将向我们的回调发送一条消息,提醒我们。目前我们是这样解决的:
function getStatus() {
var action = "getStatus";
$.ajax( {
type: "POST",
url: "/scripts/scripts.php",
data: { "action" : action, "id" : id },
cache: false,
async: false,
success: function( html ) {
if ( html == "Success" )
window.location.href = "/next-step";
else
return setTimeout( getStatus, 2000 );
}
} );
}
getStatus();
当我们获得回调时,我们更新数据库,注意操作已经完成。同时,我们使用jquery每2秒查询一次数据库寻找一个完成,当它发生时,我们重定向用户。
查询数据库查找成功似乎效率低下。有没有更好的办法?
不幸的是,这是http的问题,客户端需要从后端轮询数据来检查发生的更新。
一个更好的解决方案是使用websocket,它允许后端在发生变化时通知前端。
这是websocket的链接
相对容易设置和使用。