2013-11-26 3 views
2

Я старый программист «С», и с Javascript всегда приходится заполнять мои данные после вызовов ajax; т. е. я всегда прибегаю к использованию глобальных ссылок. Я предпочел бы передать объекты, которые мне нужно обновить. Вот один пример того, что я делаю сейчас - «приложение» является глобальным (я использовал указатель в C :))Javascript & Ajax - лучший способ заполнить объекты?

treeMapp.login = function (dialog_div, form_div, server_call) { 

// validate the fields 
if (0) { 

} 
else { 
    // send to server & parse JSON response (single line) 
    var jqxhr = 
     $.getJSON(server_call, 
      $("#" + form_div).serialize()) 
      .done(function(data, status) { 

       if(status == 'success') { 
        // hack!? 
        app.user.username = data.username; 
        app.user.organisation = data.organisation; 
        app.user.loggedIn = true; 
        //close the dialog 
        $('#' + dialog_div).dialog('close'); 
       } 
       else { 
        // login failed 
        alert("login failed!"); 
       } 
      }) 
      .fail(function() { 
       alert("login: server error"); 
     }); // end var jqxhr = 

} // end else (field validation ok) 

}; // end treeMapp.login() 

Какой самый лучший способ обновления прошло в параметрах?

благодаря

мини

+0

Ты делаю это правильно :) – leaf

+1

О нет, он не! (Ну, это время для рождественских панто: -P) – vogomatix

ответ

2

Вы можете передать app в качестве аргумента для вашей treeMapp.login функции, то в рамках него будет местным.

treeMapp.login = function (dialog_div, form_div, server_call, app)

+0

попробовал - get 'app.user undefined' в Firebug - кажется, что приложение в качестве локального выходит за рамки во время ajax? – minisaurus

+0

Хмм - попробуйте исправить ниже .... – vogomatix

+0

Вы включили его в звонок? – Samy

0

Вы можете назначить объект данных, возвращенный результат Jquery к app.user, что позволяет избежать необходимости элемента путем присвоения элементов.

т.е. app.user = данные

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

UPDATE: следующие показывает объединение ответов ...

treeMapp.login = function (dialog_div, form_div, server_call, theapp) { 
    var app = theapp; // may be needed for scope issue.. 

// validate the fields 
if (0) { 

} 
else { 
    // send to server & parse JSON response (single line) 
    var jqxhr = 
     $.getJSON(server_call, 
      $("#" + form_div).serialize()) 
      .done(function(data, status) { 

       if(status == 'success') { 
        // not a hack 
        $.extend(this.app.user, data, { loggedIn: true }) 
        //close the dialog 
        $('#' + dialog_div).dialog('close'); 
       } 
       else { 
        // login failed 
        alert("login failed!"); 
       } 
      }) 
      .fail(function() { 
       alert("login: server error"); 
     }); // end var jqxhr = 

} // end else (field validation ok) 

}; // end treeMapp.login() 
+1

Я думал о '$ .extend (app.user, data, {loggedIn: true})': http://api.jquery.com/jQuery.extend/. – leaf

+0

Хорошая идея, за исключением того, что мне не нравятся глобальные переменные - см. Исправленный ответ. – vogomatix

+0

Есть, по крайней мере, одна глобальная переменная где-нибудь, возможно, приложение? : D – leaf

Смежные вопросы