修改 我想回到这里并发布我为其他人的利益而找到的解决方案。对我有用的是将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);
});
'结果'仍然在控制台中未定义,但警报现在不起作用。有什么想法吗?