Jquery AJAX:如何在“成功”上更改按钮值?

时间:2011-04-22 20:27:37

标签: ajax jquery

我在一个页面上有多个按钮。点击后,我跟踪按钮ID,发送按钮值到后端php代码,通过更改数据库返回更新的值。除了这个,我能够得到我需要的一切:成功时设置按钮值!这是我正在使用的代码:

$(document).ready(function(){
    $("input[type='button']").click(function(){
        var selected = $(this).attr("id");
        var val = prompt("Enter new value",0);
                    $.ajax({
                    url:'updateCostItems.php',
                    data:{toupdate:selected, updatewith:val},
                    type:'GET',
                    dataType:'json',
                    success:function(json){
                        $(this).val(json.update);
                    },
                    error:function(xhr, status){
                        alert("Problem");
                    },
                    complete:function(xhr, status){

                    }
                });
        });
});

4 个答案:

答案 0 :(得分:4)

我认为this不正确,因为回调是在全局范围内运行的。

未经测试,但请在$.ajax之前尝试编写var $this = $(this),然后在回调中使用$this.val(json.update)


修改:更新了代码段,通过使用var声明来确保本地$this。其他帖子建议使用var button = $(this),这在更大的项目中可能会更好,因为跟踪变量更具挑战性 - 但所有答案都是相同的。

答案 1 :(得分:1)

问题是,在ajax请求中,'this'指向xhr对象,而不是按钮。您应该在拨打电话之前存储对按钮的引用,例如var button = $(this);以及稍后更新button.val(json.update);

答案 2 :(得分:1)

将按钮存储在外部循环的局部变量中,然后在成功处理程序的内部范围内引用该变量:

$(document).ready(function(){
    $("input[type='button']").click(function(){
        var $btn = $(this)
        var selected = $btn.attr("id");
        var val = prompt("Enter new value",0);
        $.ajax({
            url:'updateCostItems.php',
            data:{toupdate:selected, updatewith:val},
            type:'GET',
            dataType:'json',
            success:function(json){
                $btn.val(json.update);
            },
            error:function(xhr, status){
                alert("Problem");
            },
        });
    });
});

答案 3 :(得分:0)

$(this)在调用成功函数时不会引用按钮。您需要将按钮(或按钮的id)作为参数传递给回调。存储单个全局变量是不够的,因为在第一个ajax调用返回之前,您可能会单击第二个按钮。