Function.prototype.apply:参数列表的类型错误

时间:2013-11-13 17:07:09

标签: javascript jquery ajax

The error in the title of the post came from jQuery version 1.10.2, line 637 我有一个模式,弹出按钮单击一些文本框,当单击模式中的按钮时,文本框中的信息将通过AJAX添加到数据库中。为了使页面更加用户友好,我添加了一个setTimeout函数来暂停隐藏模态,以便用户可以看到数据已添加到数据库的验证消息。我的代码块1将记录添加到数据库,但是setTimeout调用不能正常工作:

 function insert(data) {
                data = JSON.stringify(data);
                $.ajax({
                    type: "POST",
                    url: "../Service.asmx/InsertPerson",
                    dataType: "json",
                    contentType: "application/json",
                    data: data,
                    //record gets added to the database
                    //something about the setTimeout function 
                    //that gives the error in the title
                    success: function () {
                        console.log('success before setTimeout');
                        var successMessage = $('<div>').text('Successfully added to the database...').css('color', 'green');
                        $('.modal-body').append(successMessage);
                        //*******this function doesn't run
                        window.setTimeout(function () {
                            $('#contact').modal('hide');
                            $('.modal-body input').each(function () {
                                $(this).val('');
                            }, 1000);
                        });
                    }
                });
            }

我使用代码修复它: (成功功能是我们需要注意的)

function insert(data) {
                data = JSON.stringify(data);
                $.ajax({
                    type: "POST",
                    url: "../Service.asmx/InsertPerson",
                    dataType: "json",
                    contentType: "application/json",
                    data: data,
                    //record gets added to the database
                    success: function () {
                        console.log('success before setTimeout');
                        var successMessage = $('<div>').text('Successfully added to the database...').css('color', 'green');
                        $('.modal-body').append(successMessage);
                        window.setTimeout(function () {
                            $('.modal-body input').each(function () {
                                $(this).val('');
                            });
                            $('#contact').modal('hide');
                        }, 1000);

                    }
                });
            }

我看到我在第一个块中没有关闭each函数,我在第二个块中修复了这个问题,这就是为什么它可以工作,但为了将来参考,这个错误真的意味着什么这个背景?

1 个答案:

答案 0 :(得分:2)

这意味着您将第二个参数留给了setTimeout,而是将其作为第二个参数传递给.each()

编辑 - 看起来jQuery正在拾取参数(1000)并尝试将其传递给其内部each实现。 .apply()函数希望它是一个数组。