-2

すぐに呼び出される関数パターンを使用していますが、これは ID を渡していません

1.ユーザーが $user をクリックすると、id が渡され、チャット ウィンドウが表示されます。

echo "<div class='boxbottom'><a href='#' onclick=chat_com_one($id);> >$user</a><br></div>";

2.関数chatcom_load_oneは、chatcom_load_one関数に渡されたIDからのメッセージがあるかどうかをチェックし続けます。

しかし問題は、onclick 関数が ID を渡すが、すぐに呼び出された関数が後処理に ID を渡さなかったことです。

メッセージの送信も遅いですか?

エラーはchat_load_oneパターンにあると思います。

function chat_com_one(id) {

    $('#chatcom').show('fast');
    (function chatcom_load_one(id) {
        $.post('sendchat2.php', {
            option: 'chatcom_load_one',
            tocom: id
        }, function (data) {
            $('#chatcom #commid #commidwin').html(data);
            setTimeout(chatcom_load_one(id), 1000);
        });
    }());
    $('#chatcom_send').click(function () {
        var text = document.getElementById('chatcom_text').value;
        $.post('sendchat2.php', {
            option: 'chat_com_send_one',
            text: text,
            tocom: id
        }, f
        function (data) {
            document.getElementById('chatcom_text').value = '';
        });
    });
}

私のサーバーの送信機能

    if($_REQUEST['option']=='chat_com_send_one'){
    $session=new $session;
    $text=mysqli_real_escape_string($db3->connection,$_POST['text']);
    $tocom=mysqli_real_escape_string($db3->connection,$_POST['tocom']);
    $sql=mysqli_query($db3->connection,"INSERT INTO chat_com(fro,tocom,mesg,time) VALUES ('$session->userid','$tocom','$text',CURRENT_TIMESTAMP)");
}
4

2 に答える 2

1

前述の問題に加えて、パラメータなしですぐに実行される関数を呼び出します。(id)id要素を関数内のローカルコピーに渡すには、関数呼び出しにパラメーターを追加する必要があります。

(function chatcom_load_one(id) {
   ...
}(id));
于 2012-11-25T10:51:26.337 に答える
1

まず、2つの問題に気づきました。

  • パラメータリストに構文エラーがあります$.post
  • あなたはおそらくこれをしたくないでしょう:setTimeout(chatcom_load_one(id), 1000);

これらのエラーが修正されたコードの更新バージョンは次のとおりです。

function chat_com_one(id) {

    $('#chatcom').show('fast');
    (function chatcom_load_one(id) {
        $.post('sendchat2.php', {
            option: 'chatcom_load_one',
            tocom: id
        }, function (data) {
            $('#chatcom #commid #commidwin').html(data);
            setTimeout(function () {
                chatcom_load_one(id);
            }, 1000);
        });
    }());

    $('#chatcom_send').click(function () {
        var text = document.getElementById('chatcom_text').value;
        $.post('sendchat2.php', {
            option: 'chat_com_send_one',
            text: text,
            tocom: id
        },
        function (data) {
            document.getElementById('chatcom_text').value = '';
        });
    });
}

また、jQueryを使用しているため、を簡略化できますdocument.getElementById...。別の更新されたバージョン(読みやすくするためにいくつかの変更が加えられています):

function chat_com_one(id) {
    $('#chatcom').show('fast');

    (function chatcom_load_one(id) {
        $.post('sendchat2.php', {
            option: 'chatcom_load_one',
            tocom: id
        }, function (data) {
            $('#commidwin').html(data);
            setTimeout(function () {
                chatcom_load_one(id);
            }, 1000);
        });
    }(id));

    $('#chatcom_send').click(function () {
        var text = $('#chatcom_text').val();
        $.post('sendchat2.php', {
            option: 'chat_com_send_one',
            text: text,
            tocom: id
        },
        function (data) {
            $('#chatcom_text').val('');
        });
    });
}

これらはほんの数回のクリーンアップであり、他にもある可能性があります。

編集:

最終的に更新されたコードにdevnull69の洞察を追加しました。うまくいけば、それは役に立ちます(これが問題だった場合は彼の答えを受け入れてください)。

編集:その他の注意事項

なんでやってる$.postchatcom_load_one?としてははるかに理にかなって$.getおり、クエリパラメータは引き続き送信されます。それ自体は実際には問題ではありませんが、悪いスタイルです。これはおそらく、パラメータgetchat.phpを探していると私が期待することを行うのではなく、または何かと呼ばれるファイルにあるはずです。text

また、の実装はわかりませんが、sendchat2.phpおそらくタイムアウトを減らす必要があります。250ms程度のようなものを試してください。これによってサーバーが過負荷になることはなく、応答時間が改善されます。

于 2012-11-25T10:47:07.263 に答える