在Jquery Ajax调用中使用On success函数

时间:2012-12-11 07:35:23

标签: ajax jquery

我有一个名为Widget.js的.js类 在widget.js类中,我启动了一个errors.ascx控件类,其中定义了JS脚本函数“GetErrors()”。 现在,当我从我的widgets.js类调用GetErrors时,它工作得非常好。 我必须使用GetErrors()函数的输出在widgets.js中填充一些控件。 但问题是,有时GetErrors()需要花费大量时间来执行,并且控件会运行到我的小部件类。并填充控件,其中没有任何数据。

所以底线是我需要知道Jquery的OnSuccess函数的确切用法。

这是我的errors.ascx代码

var WidgetInstance = function () {
        this.GetErrors = function () {
                       $.ajax({
                url: '/Management/GetLoggedOnUsersByMinutes/',
                type: 'GET',
                cache: false,
                success: function (result) {
                    result = (typeof (result) == "object") ? result : $.parseJSON(result);
                    loggedOnUsers = result;
                }
            });
        },.....

Widgets.js文件的代码是

function CreateWidgetInstance() {
    widgetInstance = new WidgetInstance();
    widgetInstance.GetErrors();
    }

现在我想要控件应该从

移动
widgetInstance.GetErrors();

只有在产生结果时才会生效。

任何帮助???

3 个答案:

答案 0 :(得分:2)

您可以使用jQuery Deferreds。 $ .ajax()实际上返回一个promise。所以你可以做到以下几点:

var WidgetInstance = function () {
    this.GetErrors = function () {
                   return $.ajax({
                            url: '/Management/GetLoggedOnUsersByMinutes/',
                            type: 'GET',
                            cache: false
                   });
    },.....

然后你可以像这样处理结果......

widgetInstance.GetErrors().done(function(result){
    //process the resulting data from the request here
});

答案 1 :(得分:0)

您好,只需在您的AJAX通话中使用async:false ..它将阻止控制,直到响应到达客户端...

var WidgetInstance = function () {
        this.GetErrors = function () {
                       $.ajax({
                url: '/Management/GetLoggedOnUsersByMinutes/',
                type: 'GET',
                cache: false,
                async: false,
                success: function (result) {
                    result = (typeof (result) == "object") ? result : $.parseJSON(result);
                    loggedOnUsers = result;
                }
            });
        },.....

答案 2 :(得分:0)

我为此做了一个简单的解决方案.. 我刚刚在我的控件的GetErrors()的onSuccess事件中调用了我的填充函数,一切都运行得很好..