无法在ajax函数

时间:2017-09-20 13:49:51

标签: javascript ajax prototypal-inheritance

修改 我想回到这里并发布我为其他人的利益而找到的解决方案。对我有用的是将promise对象分配给变量(promiseObject)并在其上使用“.then”方法来使用返回的值。请不要贬低我,因为这是为了改善我的问题并使其对社区有用。以下是工作代码。

    var data = ({"bankno": $('#bankno').val() });
    rec = new ajaxCall('ajax','getBankRec','json');
    var promiseObject = rec.execQuery(data);//promise object assignmnt
    promiseObject.then(function(value){ //then function
        $('[name="lastrecbal"]').val(value.bal); //do stuff with result
        checkClearedAmount(); //do stuff with result
    });

结束编辑

学习在javascript中使用对象和原型。我正在使用ajax来构建异步Web服务。我不想在我需要的地方重复我的ajax调用,因为这样效率低且容易出错。下面的对象似乎工作,即我可以访问我创建的新对象中的原型属性和函数,但我无法设置任何属性或调用ajax函数中的任何方法。我想将“result”属性设置为服务器返回到ajax调用的任何内容。它出现空白(给“结果”的初始值)或未定义。如果我直接在ajax函数中警告结果,则会向我提供我期望的数据库中的值。为什么不设置原型属性?

function ajaxCall(method,datatype) {
this.method = method;
this.datatype = datatype;
this.result = '';
this.input = '';
this.error = '';
}

ajaxCall.prototype = {  
    constructor: ajaxCall,
    execQuery:function (input) {
        var self = this;
        $.ajax({
        url     : 'path/to/server/side',
        type    : 'post',
        dataType: this.datatype,
        data    : input,
        success : function(data) {
                  self.setResult(data);
                },
        error   : function(jqXHR, exception) {
                msg = someErrorFunction();
                self.error = msg;
                self.setResult(self.error);
                }
        });
    },
    setResult:function(data) {
        this.result = data;
    },
    getResult:function() {
        return this.result;
    }
};

这就是我使用原型的方式。我正在尝试将一个银行帐号发送到数据库,并将最后一个对帐余额作为json对象(rec.bal)。最终结果总是未定义或只是空白。

var data = ({"bankno": $('#bankno').val() });
//gets the account number to send to the server
rec = new ajaxCall('getBankRec','json');
//specifies the php class method on the server side and the return type
rec.execQuery(data);
var result = rec.getResult(); 
alert(result.bal);
alert(result);

修改 我现在理解这个问题,并且我已经重新编写了一些内容,包括一个Promise功能来处理ajax请求的时间,但它仍然无法正常工作。我将不胜感激任何关于我的更新代码的建议。

function ajaxCall(method,datatype) {
    this.method = method;
    this.datatype = datatype;
    this.result = '';
    this.input = '';
    this.error = '';
}

ajaxCall.prototype = {  
    constructor: ajaxCall,
    execQuery:function (input) {
        var obj = new Promise(function (resolve, reject) {
        $.ajax({
            url     : '/path/to/server/side',
            type    : 'post',
            dataType: this.datatype,
            data    : input,
            context : this,
            success : function(data) {
                    resolve(data);
                    },
            error   : function(jqXHR, exception) {
                    var error = someErrorFunction
                    reject(error);
                    }
            }); //end of ajax request

        }); //end of Promise
        return obj;
    },
    getResult:function(promiseObject) {
        promiseObject
        .then(function (result) {
            return result;
        })
        .catch(function (error) {
            return error;
        });
    }
};

实施原型:

 $(document).ready(function() {
    var data = ({"bankno": $('#bankno').val() });
    rec = new ajaxCall('getBankRec','json');
    var promiseObject = rec.execQuery(data);
    var result = rec.getResult(promiseObject); 
    alert(result.bal);
    alert(result);
    });

'结果'仍然在控制台中未定义,但警报现在不起作用。有什么想法吗?

0 个答案:

没有答案