我有一个带有链接的页面,用户点击该链接将我们的api记录在Facebook之外。单击它时,它调用一个调用php方法的ajax函数从我们的数据库中删除用户键,然后从JS命令调用Facebook api注销函数。这会调用Facebook并结束用户会话。注销后,它会刷新页面。
我的问题是它似乎没有等待数据库更新完成和注销Facebook并刷新页面。由于它没有完成它,信息永远不会被删除,我的网站永远不会退出。每隔一段时间,它就会发生一次,但也许每10次点击一次。
我输入了一个setTimeout 2秒钟,但它仍无法正常工作。
有什么想法吗?
答案 0 :(得分:1)
您在等待AJAX回调吗?由于它是异步请求,因此在用onreadystatechange()
调用status=4
函数之前,不能保证它已完成。
编辑:我正在谈论的一个例子:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.responseText == 'logged out successfully') {
facebookLogout(uid);
}
}
xhr.open('GET', 'http://example.com/my_logout.php?uid=' + uid, true);
xhr.send();
编辑2:在评论中澄清您的问题:
1)是的,PHP只需做一个回声。这没有必要 - 我只是添加了一个例子来确保请求没有完成,因为它失败/被中止。
2)对于$.get
和朋友,这是jQuery而不是纯Javascript,它有自己的工具。在jQuery中你会写一些类似的东西:
$.get('my_logout.php?uid=' + uid, function(data) {
if (data == 'logged out successfully') {
facebookLogout(uid);
}
});
答案 1 :(得分:1)
请勿使用setTimeout
尝试对Ajax调用进行后续操作。改为使用回调函数;这样就保证只在Ajax调用完成后执行。
答案 2 :(得分:1)
根据评论,我看到你正在使用jQuery。在这种情况下,您只需要将回调函数作为函数参数传入。另请参阅jQuery.get documentation。
$.get('foo.php', function() {
alert('Finished!');
});
或
$.get('foo.php', functionname);
// ...
function functionname() {
alert('Finished!');
}
要了解有关jQuery的更多信息,我强烈建议您学习如何查找/阅读/解释其在线文档。这真的很棒。主页上还有一个Tutorials section。 jQuery不是只是 JavaScript。这是一个基于JavaScript的库。