Передача данных из методов в JavaScript - PullRequest
0 голосов
/ 20 января 2011

Абсолютно новый для ООП в javascript, но я пытаюсь и читать все, что я могу.

Я создал простой тестовый класс javascript под названием Invoices.Счета только имеет два метода.Один метод увольняет другой.И эта часть, кажется, работает нормально.

Моя проблема заключается в получении объектов данных из одного метода в другой.Я поместил предупреждение в первый метод, (из моего понимания) это предупреждение должно показывать данные, возвращенные вторым методом ... но это не так.

Любая помощь будет принята с благодарностью.Ох .. и я тоже использую 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 ]

2 голосов
/ 20 января 2011

Есть две проблемы с этим.Прежде всего, $.post является асинхронным;вам придется принять схему обратного вызова или использовать $.ajax, чтобы сделать ее синхронной.Во-вторых, вы, вероятно, хотели это сделать:

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

Обратите внимание, как замыкание в скобках вызова функции.

0 голосов
/ 20 января 2011

Как вам сказали, вызов AJAX асинхронный, вам нужно реализовать свой initAdd в 2 этапа:

  1. BeginInitAdd, который инициирует вызов AJAX
  2. 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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...