Jquery ajax调用太快

Jquery ajax调用太快,jquery,html,ajax,facebook,Jquery,Html,Ajax,Facebook,我有一个带有链接的页面,用户点击该页面可以将我们的api从Facebook注销。当您单击它时,它调用一个ajax函数,该函数调用一个php方法从数据库中删除用户密钥,然后从JS命令中调用FacebookAPI注销函数。这将调用Facebook并结束用户会话。一旦注销,它将刷新页面 我的问题是,它似乎不是在等待数据库更新完成,然后注销Facebook并刷新页面。因为它没有完成它,信息永远不会被删除,我的网站永远不会注销。每隔一段时间,它就会起作用,但可能每10次点击一次 我设置了2秒的超时时间,但

我有一个带有链接的页面,用户点击该页面可以将我们的api从Facebook注销。当您单击它时,它调用一个ajax函数,该函数调用一个php方法从数据库中删除用户密钥,然后从JS命令中调用FacebookAPI注销函数。这将调用Facebook并结束用户会话。一旦注销,它将刷新页面

我的问题是,它似乎不是在等待数据库更新完成,然后注销Facebook并刷新页面。因为它没有完成它,信息永远不会被删除,我的网站永远不会注销。每隔一段时间,它就会起作用,但可能每10次点击一次

我设置了2秒的超时时间,但仍然不起作用


有什么想法吗?

您在等待AJAX回调吗?由于它是一个异步请求,因此在它使用
status=4
调用
onreadystatechange()
函数之前,不能保证它已完成

编辑:我所说的一个例子:

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
和friends,这是jQuery而不是纯Javascript,后者有自己的工具。在jQuery中,您可以编写如下内容:

$.get('my_logout.php?uid=' + uid, function(data) {
   if (data == 'logged out successfully') {
     facebookLogout(uid);
   }
 });

您在等待AJAX回调吗?由于它是一个异步请求,因此在它使用
status=4
调用
onreadystatechange()
函数之前,不能保证它已完成

编辑:我所说的一个例子:

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
和friends,这是jQuery而不是纯Javascript,后者有自己的工具。在jQuery中,您可以编写如下内容:

$.get('my_logout.php?uid=' + uid, function(data) {
   if (data == 'logged out successfully') {
     facebookLogout(uid);
   }
 });

不要使用
setTimeout
尝试为Ajax调用的后续操作计时。改用回调函数;这样,它保证只在Ajax调用完成后执行。

不要使用
setTimeout
尝试为Ajax调用的后续操作计时。改用回调函数;这样,它保证只在Ajax调用完成后执行。

根据注释,我看到您使用的是jQuery。在这种情况下,您只需要传入一个回调函数作为函数参数。另请参阅


为了进一步了解jQuery,我强烈建议学习如何查找/阅读/解释他们的在线文档。真是太棒了。主页上也有一个。jQuery不仅仅是JavaScript。这是一个基于JavaScript的库。

根据评论,我看到您正在使用jQuery。在这种情况下,您只需要传入一个回调函数作为函数参数。另请参阅


为了进一步了解jQuery,我强烈建议学习如何查找/阅读/解释他们的在线文档。真是太棒了。主页上也有一个。jQuery不仅仅是JavaScript。这是一个基于JavaScript的库。

如何使用此请求?这可以用$get电话完成吗?php函数只返回带有和echo的内容,对吗?在$(document).ready(function()中{函数。我对整个JS领域都是新手,并试图确保我理解它all@Nathan:哪个库?看起来可能是jquery?jquery
get
接受一个回调函数,这是您应该放置后续代码的地方。这个请求是如何使用的?这可以通过$.get调用来完成吗?php函数只返回ith和echo,对吗?在$(文档).ready(函数()中{函数。我对整个JS领域都是新手,并试图确保我理解它all@Nathan:哪个库?看起来可能是jquery?jquery
get
使用回调函数,这是您应该放置后续代码的地方。我尝试了这种方法,但它似乎只是坐在那里,在回显返回时从不拾取。我找到了post,并且它应该可以工作,所以我使用了这个命令$.post(域,{subject:'Hi'},函数(data){当我直接通过url运行这个方法时,我得到了这个输出,然后从php方法中终止。{“status”:1}由于某种原因,帖子正在崩溃,它从未执行注销调用。有什么想法吗?我在前后都有一个警报,它们都在运行。我尝试了这个方法,但它似乎只是坐在那里,从未接收回显。我找到了帖子,并认为它会工作,所以我使用了这个命令$.post(域,{subject:'Hi'),function(data){当我直接通过url运行这个方法时,我得到了这个输出,然后从php方法中得到终止。{“status”:1}由于某种原因,帖子正在崩溃,它从未执行注销调用。有什么想法吗?我在前后都有一个警报,它们都在运行。