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

Jquery Can';我不能让$.proxy工作,我做错了什么?,jquery,ajax,jquery-ui,Jquery,Ajax,Jquery Ui,我试图在jQueryUI对话框中使用代理来调用$.post AJAX,但我似乎无法让它工作,它没有运行警报框,但post工作正常 这是我所在的位置,这是对话框上的创建按钮 'Create Category' : function(){ var newCategory = $('#new-category-name').val(); if(newCategory != ''){ var data = {category:newCategory, ci_csrf_token:

我试图在jQueryUI对话框中使用代理来调用$.post AJAX,但我似乎无法让它工作,它没有运行警报框,但post工作正常

这是我所在的位置,这是对话框上的创建按钮

'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)
,但没有成功

任何帮助都将不胜感激


如果您需要,我还设置了此小提琴:

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

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');
        }
    },
});
        $.ajax({
            type: 'POST',
            context: this,
            data: {},
            success: ajaxSuccess
        });

您需要在使用函数之前声明它。此外,您可能希望使用
var
关键字来执行此操作,因此该变量不在全局范围内。请参见此操作:

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

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');
        }
    },
});
        $.ajax({
            type: 'POST',
            context: this,
            data: {},
            success: ajaxSuccess
        });

请参见操作:。

要显示数据并关闭对话框吗?这需要使用$.proxy吗?我想不是,只是觉得这是一个更优雅的解决方案。:)我一直在使用
$('#dialog')。dialog('close')并且工作正常。我可能会坚持下去…为什么不创建一个函数来处理数据并关闭对话框,在所有$.post中调用它呢?是的,听起来有点好,谢谢!非常感谢。。。我知道ajax上下文的事情,这就是我发现代理的原因。