Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么立即调用的函数不能正常工作_Php_Javascript - Fatal编程技术网

Php 为什么立即调用的函数不能正常工作

Php 为什么立即调用的函数不能正常工作,php,javascript,Php,Javascript,我使用的是立即调用的函数模式,但这不是传递id 1.当用户单击$user时,会传递id并显示聊天窗口 echo "<div class='boxbottom'><a href='#' onclick=chat_com_one($id);> >$user</a><br></div>"; 在我的服务器上发送函数 if($_REQUEST['option']=='chat_com_send_one'){ $sessio

我使用的是立即调用的函数模式,但这不是传递id

1.当用户单击$user时,会传递id并显示聊天窗口

echo "<div class='boxbottom'><a href='#' onclick=chat_com_one($id);> >$user</a><br></div>";
在我的服务器上发送函数

    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)");
}

首先,我注意到两个问题:

  • 参数列表中的
    $有语法错误。post
  • 您可能不想这样做:
    setTimeout(chatcom\u load\u 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…
。另一个更新版本(进行了更多更改以使其更具可读性):

这些只是一些清理,可能还有其他清理

编辑:

将devnull69的见解添加到我最终更新的代码中。希望这是有用的(如果这是问题,请接受他的答案)

编辑:其他注释

你为什么要做
$。在
chatcom\u load\u one
中发布
?作为一个
$.get
,它将更有意义,并且查询参数仍将被发送。这本身并不是一个问题,但这是一种糟糕的风格。这可能应该在一个名为
getchat.php
的文件中,或者其他一些文件中,而不是像我期望的那样查找
text
参数


另外,我不知道
sendchat2.php
的实现,但是您可能应该减少超时时间。试试250ms左右。这不会使服务器过载,而且会提高响应时间。

除了前面提到的问题之外,您可以在不使用任何参数的情况下调用立即执行的函数。您必须将
(id)
参数添加到函数调用中,以便将id元素交给函数内部的本地副本

(function chatcom_load_one(id) {
   ...
}(id));

您在上一次的
$中遇到语法错误。post
f function
@tjameson如何删除此错误我在回答中做了一系列修复,希望能有所帮助。谢谢,但tocom id仍然没有传递。请查看@devnull69的回答。我将其添加到我的邮件中,但如果修复了,请接受他的邮件。@tjameson现在工作正常,但为什么发送邮件速度慢(显示在聊天窗口中大约需要2-3秒)。请提供帮助。@tjameson发送速度慢。您是否可以在您的答案中添加$.get或其他方法。谢谢这将需要更改您的服务器代码,而我无权访问该代码。既然你的问题已经得到了回答,也许是时候开始一个新的问题了?
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('');
        });
    });
}
(function chatcom_load_one(id) {
   ...
}(id));