javascript错误:未定义变量

Hri*_*sto 2 javascript php

to is not defined
[Break on this error] setTimeout('updateChat(from, to)', 1); 
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误......我正在使用Firebug进行测试,这会出现在控制台中.该错误对应于chat.js的第71行,包含该行的整个函数是:

function updateChat(from, to) {

    $.ajax({
        type: "POST",
        url: "process.php",
        data: {
            'function': 'getFromDB',
            'from': from,
            'to': to
        },
        dataType: "json",
        cache: false,
        success: function(data) {

            if (data.text != null) {
                for (var i = 0; i < data.text.length; i++) {  
                    $('#chat-box').append($("<p>"+ data.text[i] +"</p>"));
                }
                document.getElementById('chat-box').scrollTop = document.getElementById('chat-box').scrollHeight;
            }
            instanse = false;
            state = data.state;
            setTimeout('updateChat(from, to)', 1); // gives error
        },  
    });
}
Run Code Online (Sandbox Code Playgroud)

这通过函数调用链接到process.php,getFromDB代码是:

case ('getFromDB'):

    // get the sender and receiver user IDs from their user names
    $from = mysql_real_escape_string($_POST['from']);
    $query  = "SELECT `user_id` FROM `Users` WHERE `user_name` = '$from' LIMIT 1";
    $result = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_assoc($result);
    $fromID = $row['user_id'];  

    $to = mysql_real_escape_string($_POST['to']);
    $query  = "SELECT `user_id` FROM `Users` WHERE `user_name` = '$to' LIMIT 1";
    $result = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_assoc($result);
    $toID = $row['user_id'];

    $query = "SELECT * FROM `Messages` WHERE `from_id` = '$fromID' AND `to_id` = '$toID' LIMIT 1";
    $result = mysql_query($query);
    while($row = mysql_fetch_assoc($result)) {

        $text[] = $line = $row['message'];
        $log['text'] = $text;

    }

    break;
Run Code Online (Sandbox Code Playgroud)

所以我对提供错误的行感到困惑.setTimeout('updateChat(from,to)',1);是不是updateChat进入函数的相同参数的参数?或者他们是从其他地方进入的,我必须在其他地方定义?任何想法如何解决此错误?

谢谢,Hristo

Pek*_*ica 7

这可能是因为在以setTimeout这种方式定义函数时,当前函数的作用域不适用.我不确切地说实话.不过应该很容易找到:试试吧

 setTimeout(function() { updateChat(from, to) }, 1);
Run Code Online (Sandbox Code Playgroud)

如果它有效,那就是它.

如果不是这样的话:你确定to首先通过了第一次updateChat()通话吗?