Аякс с обратным вызовом пройден - PullRequest
0 голосов
/ 09 октября 2018

У меня есть следующий код в прототипе, и я хотел бы передать функции обратного вызова (successf, failf), из которых создается экземпляр Data.Это, кажется, не вызвали, хотя, любая помощь ценится.Все это прекрасно работает, если определено в основном приложении, очевидно, и если я использую 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 голосов
/ 10 октября 2018

Я решил это следующим образом:

в файле 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);
            }
        });                 
}
0 голосов
/ 09 октября 2018

Я пытаюсь угадать, что вы хотите - кажется, вы хотите установить обратные вызовы в "конструкторе" 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 никогда не назначаетсязначение, так какой смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...