2011-01-20 2 views
0

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

Ive создал простой тестовый класс 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

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

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

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

+1

Спасибо за ответ. Я исправил эту синтаксическую ошибку. Начальная часть фактически работает. Я могу видеть запрос XHR и ответ json, однако, предупреждение все еще говорит undefined. – Peter

+0

@Peter - я не понимаю, почему вы говорите, что есть ответ json, но предупреждение не определено. Как вы увидели json? вы предупреждаете данные json? – Reigel

0

Как вы сказали, что вызов 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) 
    } 
} 
Смежные вопросы