关于以下功能我有两个问题。显然,这是关于聊天。在函数chat()
中,调用不同的函数,一个用于建立连接,一个用于搜索某人(随机)聊天,另一个用于每秒获取消息。
function chat()
{
//Open connection
var openconnection=openConnection();
//Stop function if connection could not be established
if(openconnection==false) return;
//Search for someone to chat with
searchforcontact=searchForContact();
if(searchforcontact==false) return;
//Constantly get messages
setTimeout(function(){
setInterval(getMessages(),1000);
},2000);
}
function openConnection() {
//Establish connection to php script
$.ajax({
type: 'POST',
url: 'action/chat/openconnection.php',
success: function(connection) {
//Let user know that someone to chat with is searched for
$('#chatTextDiv').append('bla');
//Return that the connection was successfull
return true;
}
}).error(function() {
//Let user know that a connection could not be established
$('#chatTextDiv').append('bla');
//Return false
return false;
});
}
以下是我的问题:
1:如果无法建立连接,我使用return来停止函数chat()
。然而,这些功能继续searchForContact()
,即使失败,仍然会继续。怎么样?
2:函数getMessages()
只运行一次,我想知道为什么?仅供参考,我使用超时来实现可用性。
答案 0 :(得分:3)
很可能openConnection()
不会返回false。由于同步API非常罕见且在JavaScript中无法实现,我很确定openConnection
不能像您使用它一样工作。请提供有关openConnection
功能的更多信息。
此外,您不是将getMessages
函数传递给对setInterval
的调用,而是调用getMessages
并将其返回的任何内容传递给setInterval
。这很可能不是你想要的。您应该将该调用更改为以下内容:
setTimeout(function(){
setInterval(getMessages,1000);
},2000);
您应该真正了解AJAX和异步API的工作原理。为了让您从头到尾,您的代码更新应该能够证明您的错误:
function openConnection(success, error) {
//Establish connection to php script
$.ajax({
type: 'POST',
url: 'action/chat/openconnection.php',
success: success
}).error(error||function () {});
}
function chat(ready) {
//Open connection
openConnection(function () {
// If this function is called, then the connection is established
//Search for someone to chat with
searchforcontact=searchForContact();
if(searchforcontact==false) return;
// I STRONGLY SUPPOSE searchForContact is also an asynchronous API!
//Constantly get messages
setTimeout(function(){
setInterval(getMessages,1000);
ready();
},2000);
}, function () {
// when this function is called, something went wrong.
});
}
chat(function () {
// when this function is called, chat is ready to be used!
});
答案 1 :(得分:1)
很抱歉回答有问题的问题,但openconnection
和searchforcontact
的价值是多少?看来他们不满足条件,所以你的return语句没有运行。您可以使用FireBug或Chrome开发者工具验证该值。
getMessages
只运行一次,因为您调用它而不是将其传递给setInterval
。它应该是setInterval(getMessages, 1000);
。