不能让$ .proxy工作,我做错了什么?

时间:2011-09-28 01:31:19

标签: jquery ajax jquery-ui

我正在尝试在jQuery UI对话框中使用代理来进行$ .post AJAX调用,但我似乎无法让它工作,它没有运行警报框,但帖子工作成功。< / p>

我在这里,这是对话框中的创建按钮。

'Create Category' : function(){
    var newCategory = $('#new-category-name').val();
    if(newCategory != ''){
    var data = {category:newCategory, ci_csrf_token: $("input[name=ci_csrf_token]").val()};
        $.post('/create/category', data, $.proxy(this.ajaxSuccess, this),'json');
    }

    ajaxSuccess = function(data)
    {
        alert ("Here");
            // Handle Data
        $(this).dialog('close');
    }
},
'Cancel' : function(){
    $(this).dialog('close');
}

我还在对话框初始化中尝试了this.ajaxSuccess = function(data)ajaxSuccess: function(data)而没有运气。

任何帮助都将不胜感激。

如果你需要,我也会设置这个小提琴:http://jsfiddle.net/CubedEye/CfmtJ/

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以重复使用逻辑来处理数据并使用以下内容关闭对话框:

function handleData(data, dg) {
    alert(data);
    $(dg).dialog('close');
}
//$('#add-category-dialog').ajaxSuccess(function(){
//    $(this).dialog('close');
//});
$('#add-category-dialog').dialog({
    modal: true,
     buttons: {
        'Create Category' : function(){
            $.post('/', {}, function(data){             
                handleData("test",$('#add-category-dialog'))    
            });
        },
        'Cancel': function(){
            $(this).dialog('close');
        }
    },
});

答案 1 :(得分:0)

您需要在使用之前声明该功能。此外,您可能希望使用var关键字执行此操作,因此该变量不在全局范围内。请参阅此操作:http://jsfiddle.net/william/CfmtJ/5/

您也可以在不使用$.proxy()的情况下实现此目的;您可以将$.ajax()context选项一起使用。因此,原始$.post()将如下所示:

        $.ajax({
            type: 'POST',
            context: this,
            data: {},
            success: ajaxSuccess
        });

请参阅此操作:http://jsfiddle.net/william/CfmtJ/6/