如何将响应数据从ajax成功传递给回调函数?

时间:2013-09-20 11:50:40

标签: jquery

(function($)
{

    $.fn.makeAjaxPostCall = function(options)
        {
            var settings = $.extend( true,{}, $.fn.makeAjaxPostCall.defaults, options );
            $.ajax({
                type: 'POST',
                url:  settings.url,
                data:   settings.data,
                success: function(data, textStatus, xhr){
                    if (xhr.readyState === 4 && xhr.status === 0) {

                        alert('Network Error');
                    }
                    else {alert(data);
                        settings.callback.call(data);
                    }
                },
                error: function(xhr, textStatus, errorThrown) {
                    if (textStatus !== null) {
                        alert("error: " + textStatus);
                    } else if (errorThrown !== null) {
                        alert("exception: " + errorThrown.message);
                    }
                    else {
                        alert ("error");
                    }
                }
            });
        };
        $.fn.makeAjaxPostCall.defaults = {
            type : 'POST',
            url : '',
            data : {},
            obj : $(document),
            callback : function(data){}
        };

})(jQuery);

这是我的ajax功能。我将此功能称为

$(document).makeAjaxPostCall({
    type : 'POST',
    url : 'UpdateNodeStatus',
    data : {
        workshopid : 1,
        userid : 1001,
        level : 5,
        nodeid : 10,
        resolutionid : 1
    },
    callback : function(data){
        alert(data);
    }
});

发布后,我从servlet返回'true'。

response.setContentType("text");
    PrintWriter pw = response.getWriter();
    pw.print(true);

我在'成功'中获取数据为'true',但在回调中为'undefined'。

如何将“数据”从“成功”传递到“回调”功能以在其中使用?

1 个答案:

答案 0 :(得分:1)

您可以直接调用回调函数而不使用.call,如下面的

settings.callback(data);

或者如果您想使用.call,请将this作为.call的第一个参数发送。

if (xhr.readyState === 4 && xhr.status === 0) {
   alert('Network Error');
}
else {
    alert(data);
    settings.callback.call(this, data);
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call