从javascript中的方法传递数据

时间:2011-01-20 04:46:09

标签: javascript jquery oop

在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;
  }
 }

2 个答案:

答案 0 :(得分:2)

这有两个问题。首先,$.post是异步的;您必须采用回调方案或使用$.ajax使其同步。其次,你可能打算这样做:

$.post(this.controllerURL + "load_customers", function(data) {
    return data;
});

注意闭包是如何在函数调用的括号中。

答案 1 :(得分:0)

正如您被告知AJAX调用是异步的,您必须在两步中实现initAdd:

  1. BeginInitAdd将启动AJAX调用
  2. EndInitAdd这将是您的AJAX调用的回调,并根据返回的数据执行操作。

  3. 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)
        }
    }