在javascript中对OOP完全不熟悉,但我正在尝试并尽我所能阅读。
我创建了一个名为Invoices的简单测试javascript类。发票只有两种方法。一种方法激发另一种方法。这部分似乎工作正常。
我的问题在于将数据对象从一个方法获取到另一个方法。我在第一种方法中发出警报,(根据我的理解)此警报应显示从第二种方法返回的数据......但不是。
非常感谢任何帮助。哦..我也在使用jquery。
这是我的代码。
function Invoices()
{
this.siteURL = "http://example.com/";
this.controllerURL = "http://example.com/invoices/";
this.invoiceID = $('input[name="invoiceId"]').val();
}
invoice = new Invoices;
Invoices.prototype.initAdd = function()
{
//load customers json obj
this.customersJSON = invoice.loadCustomers();
alert(this.customersJSON);
//create dropdown
}
Invoices.prototype.loadCustomers = function ()
{
$.post(this.controllerURL + "load_customers"),
function(data)
{
return data;
}
}
答案 0 :(得分:2)
这有两个问题。首先,$.post
是异步的;您必须采用回调方案或使用$.ajax
使其同步。其次,你可能打算这样做:
$.post(this.controllerURL + "load_customers", function(data) {
return data;
});
注意闭包是如何在函数调用的括号中。
答案 1 :(得分:0)
正如您被告知AJAX调用是异步的,您必须在两步中实现initAdd:
BeginInitAdd
将启动AJAX调用EndInitAdd
这将是您的AJAX调用的回调,并根据返回的数据执行操作。Invoices.prototype.initAdd = function()
{
//load customers json obj
this.xhrObj = invoice.loadCustomers();
alert(this.customersJSON);
}
Invoices.prototype.createDropdown = function (data) {
//create dropdown
this.customersJSON=data
}
Invoices.prototype.loadCustomers = function ()
{
return $.post(this.controllerURL + "load_customers"),
function(data)
{
//return data;
this.createDropdown(data)
}
}