功能语句没有名称错误

时间:2014-12-07 03:41:34

标签: javascript jquery ajax

我有以下代码:

<script type="text/javascript">
    $(document).on("click", "#leftconversation", function(){
        var self = this;
        var cid = $(this).attr('class'); // getting the user id here
        var request = $.ajax({
            url: "conversation.php",
            type: "POST",
            data: { cid: cid },
            beforeSend: function(){
                self.html("Loading please wait...");
            }
        });

        //WHEN SUCCESS
        request.success(function( data ) {
            $("#right").html(data); // replace the right div with echoed content from php file
        });
    });
</script>

但是,我的控制台一直给我错误:“SyntaxError:Function语句必须有一个名字。” 我似乎无法解决问题,这就是为什么AJAX代码没有运行。这个错误来自哪里?

根据Todd的说法,我将代码更改为以下内容:

  <script type="text/javascript">
            $(document).on("click", "#leftconversation", function(){
                var self = this;
    var cid = $(this).attr('class'); //you are getting the user id here
     var request = $.ajax({
                        url: "conversation.php",
                        type: "POST",
                        data: { cid: cid },
                        beforeSend: function(){
                            self.html("Loading please wait...");
                        },
                   success: function(data) { 
                   $("#right").html(data);

                   },
                   error: function(request, err){ console.log('An Error Occured' + err); }
                 });






});
</script>

它修复了第一个错误,但现在它告诉我TypeError:undefined不是一个函数(评估'self.html(“正在加载请稍候......”)')

这是固定的,应该使用var self = $(this);代替

3 个答案:

答案 0 :(得分:1)

您无需使用变量即可修复问题。只需设置context:来电的$.ajax属性。

var request = $.ajax({
    url: "conversation.php",
    type: "POST",
    data: { cid: this.className }, // Quicker way to get the class.

    context: $(this), // The context in the callback will be the jQuery object.

    beforeSend: function() {
    //   v-- This is now a jQuery object.
        this.html("Loading please wait...");
    }
});

答案 1 :(得分:1)

您发布的代码是正确的。错误必须来自其他地方。也就是说,无论错误在哪里,这里都要寻找:

您可能知道,函数可以这样定义:

function greet(name) { /* ... */ }

这适用于语句上下文。函数也可以在表达式上下文中使用:

[1, 2, 3].forEach(function(item) { alert(item); });

在表达式上下文中,我们可以省略名称,如上所述,或者我们可以包含名称:

[1, 2, 3].forEach(function foo(item) { alert(item); });

然而,我们不能做的是拥有一个没有名称的独立函数声明。这是一个错误:

function(name) { /* ... */ }

这就是你(现在的第一个)问题所在。


undefined不是函数”

您更新的代码有不同的问题。设置self = this时,this是DOM元素,而不是jQuery对象。您稍后尝试使用self.html,但DOM元素没有html属性。如果您希望使用jQuery方法,则必须在赋值(self = $(this))或使用点$(self).html时将元素转换为jQuery对象。

答案 2 :(得分:1)

根据我的评论

$(document).on("click", "#leftconversation", function(){
    var $self = $(this);
    var cid = $(this).attr('class'); // getting the user id here
    var request = $.ajax({
        url: "conversation.php",
        type: "POST",
        data: { cid: cid },
        beforeSend: function(){
            $self.html("Loading please wait...");
        }
    });

    //WHEN SUCCESS
    request.success(function( data ) {
        $("#right").html(data); // replace the right div with echoed content from php file
    });
});