通过回调的Ajax

时间:2018-10-09 03:24:21

标签: javascript jquery ajax

我在原型中有以下代码,我想传入创建数据实例的回调函数(successf,failuref)。似乎没有被调用,任何帮助表示赞赏。 如果显然在主应用程序中定义并且如果我使用async,那么一切都可以正常工作:false也可以,但是我想异步...

回调声明如下

function bdsuccess( data, textStatus, jQxhr ){                  
                ...                 
};

function bdfailure( jqXhr, textStatus, errorThrown ){
                ...
};

//invocation...
var pd = new Data();
pd.getdata('/resolve', 'test', bdsuccess, bdfailure);

原型如下...

function Data() {
}

Data.prototype.getdata = function(route, req, successf, failuref) { 
    var ps = new Support();
    var bddata = ps.b64enc(req);
    var res;
    $.ajax({
        url: route,                
        type: 'POST',               
        contentType: false,
        async: false,               
        data: {bd: bddata},
        success: successf,
        error: failuref,
    });         
    return res;
}

2 个答案:

答案 0 :(得分:0)

我正在尝试猜测您想要的-似乎您想在Data的“构造函数”中设置回调。

function Data(successf, failuref) {
    this.successf = successf;
    this.failuref = failuref;
}

Data.prototype.getdata = function(route, req) { 
    var ps = new Support();
    var bddata = ps.b64enc(req);
    var res;
    $.ajax({
        url: route,                
        type: 'POST',               
        contentType: false,
        async: false,               
        data: {bd: bddata},
        success: this.successf,
        error: this.failuref,
    });         
    return res;
}

function bdsuccess( data, textStatus, jQxhr ){                  
                ...                 
};

function bdfailure( jqXhr, textStatus, errorThrown ){
                ...
};

//invocation...
var pd = new Data(bdsuccess, bdfailure);
pd.getdata('/resolve', 'test');

关于您的原始代码,我有两点不满意

async: false

在不赞成使用主线程上的同步XHR的情况下,您正在使用回调,所以为什么要进行synchronous调用?

var res;
......
return res;

res永远不会被赋值,那有什么意义呢?

答案 1 :(得分:0)

我如下解决了这个问题,

在main.js文件中

var pd = new Data(Document);
pd.getdata('/resolve', 'testdata', bdsuccess, bdfailure);

function bdsuccess(data){       
    //success
};  

function bdfailure(error){      
    /failure                   
};

在data.js文件中

function Data(type) {
    this.subscribertype = type;
}

Data.prototype.getdata = function(route, req, successf, failuref) {
var doc = this.subscribertype;
var ps = new Support();
var bddata = ps.b64enc(req);    
$.ajax({
            url: route,                 
            type: 'POST',               
            contentType: false,             
            data: {bd: bddata}, 
            success: function( data, textStatus, jQxhr ){                   
                successf.call(doc, data);
            },
            error: function( jqXhr, textStatus, errorThrown ){                  
                failuref.call(doc, errorThrown);
            }
        });                 
}