0

次の機能に関して2つの質問があります。明らかに、それはチャットについてです。この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:chat()接続を確立できなかった場合など、returnを使用して機能を停止します。ただし、関数はに進みsearchForContact()、それが失敗した場合でも、引き続き機能します。どうして?

2:関数getMessages()は一度だけ実行されます、なぜだろうか?参考までに、使いやすさのためにタイムアウトを使用します。

4

2 に答える 2

3

ほとんどの場合openConnection()、falseは返されません。同期APIは非常にまれであり、JavaScript内からは実際にはopenConnection使用できないため、使用方法では機能しないと確信しています。機能の詳細を教えてくださいopenConnection

getMessagesまた、への呼び出しに関数を渡す代わりに、に返されるものsetIntervalを呼び出して渡します。これはおそらくあなたが望むものではありません。その呼び出しを次のように変更する必要があります。getMessagessetInterval

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!
});
于 2012-05-03T13:28:47.543 に答える
1
  1. 質問で質問に答えて申し訳ありませんが、openconnectionとの値は何searchforcontactですか?それらは条件を満たしていないようであるため、returnステートメントは実行されていません。値はFireBugまたはChromeデベロッパーツールで確認できます。

  2. getMessagesに渡すのではなく、呼び出すため、1回だけ実行されsetIntervalます。する必要がありますsetInterval(getMessages, 1000);

于 2012-05-03T13:28:17.420 に答える