2010-01-23 63 views
0

我有一个链接页面,用户点击将我们的api登出Facebook。当你点击它时,它会调用一个ajax函数,它调用一个php方法从数据库中删除用户密钥,然后从JS命令调用Facebook api注销函数。这会调用Facebook并结束用户会话。一旦注销,它会刷新页面。阿贾克斯呼叫被称为太快

我的问题是,它似乎并没有等待数据库更新完成并注销Facebook并刷新页面。由于它没有完成,信息从不删除,我的网站永远不会注销。每过一段时间,它都会炒作,但每10次点击就可能发生一次。

我把一个setTimeout 2秒,但它仍然没有工作。

任何想法?

回答

1

您是否在等待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和朋友,这是jQuery而不是纯Javascript,它有自己的工具。在jQuery中,你会写这样的:

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

如何使用此请求?这可以通过$ .get调用完成吗?而PHP函数只是返回一些与回声,正确的? – 2010-01-23 01:47:41

+0

在$(document).ready(function(){function。我是新来的整个JS领域,并试图确保我理解这一切 – 2010-01-23 01:49:32

+0

@Nathan:哪个库?它看起来像jquery也许?jQuery 'get'需要一个回调函数,这就是你应该把你的后续代码放在哪里。 – Aaronaught 2010-01-23 01:55:58

1

不要使用setTimeout尝试时间的后续行动,以一个Ajax调用。改用一个回调函数;这样保证只有在Ajax调用完成后才能执行。

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的库。

+0

我试过这个方法,但它似乎只是坐在那里,从来没有拿起回声返回。 – 2010-01-23 15:41:52

+0

我发现帖子,并认为它会工作,所以我用这个命令 $。当我直接通过url运行该方法时,我得到这个输出,这个输出被回显,然后在php方法中被杀死。 {“status”:{hi:} { 1} 由于某些原因,该帖子崩溃,并且它从不执行注销呼叫。任何创意? 我有一个提醒前后,他们都运行。 – 2010-01-24 20:17:16