2013-04-29 2 views
0

У меня есть этот код:Выявление модуль Ajax

my.data = function() { 

var getAuth = function (userName, password) { 
     var model = JSON.stringify({ "UserName": userName, "Password": password }); 
     var result; 

     $.ajax({ 
      url: my.baseUrl + "api/AD", 
      type: "POST", 
      data: model, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: false, 
      success: function (data) { 
       result = data; 
       return result; 
      } 
     });   
    } 

    return {  
     getAuth: getAuth 
    } 
}(); 

, когда я называю getAuth, я могу видеть данные возвращает «истинный», но вызывающую функцию - результат вар = my.data.getAuth (имя пользователя, пароль); возвращает undefined. любая идея?

+0

@undefine: Он поставил асинхронный: ложные –

+0

Да, Я этого не заметил. – undefined

ответ

1

Уверенный, он вернет undefined, возвращенное значение имеет функцию успеха. Не значение функции getAuth. Вы должны изменить, чтобы:

my.data = function() { 

var getAuth = function (userName, password) { 
     var model = JSON.stringify({ "UserName": userName, "Password": password }); 
     var result; 

     $.ajax({ 
      url: my.baseUrl + "api/AD", 
      type: "POST", 
      data: model, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: false, 
      success: function (data) { 
       result = data; 
      } 
     });  
     return result; 
    } 

    return {  
     getAuth: getAuth 
    } 
}(); 

Несмотря на то, что это решение работает, использование async: false не рекомендуется.

0

Две причины: 1. При переключении ajax на async: false, вы не должны передавать success: function(){...} собственности на параметры hash. Вместо этого вы должны использовать цепочку. 2. Когда вы используете return в функции success, вы возвращаетесь с success только функцией, а не с getAuth. Попробуйте это:

$.ajax({ 
    url: my.baseUrl + "api/AD", 
    type: "POST", 
    data: model, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: false, 
}).success: function (data) { 
    result = data; 
}; 
return result; 

И пару заметок. Как вы знаете, переключение на async: false может вызвать длительную задержку. Это плохая практика, и она устарела в последних версиях JQuery. Вместо этого вы должны использовать обратные вызовы. Третий аргумент вашего метода getAuth может быть функцией, что вы должны работать, когда запрос успех:

var getAuth = function(userName, password, callback){ 
    $.ajax({ 
    url: my.baseUrl + "api/AD", 
    type: "POST", 
    data: {userName: userName, password: password}, 
    success: function (data) { 
     callback(data); 
    } 
    });   
} 

И использовать это, как здесь:

my.data.getAuth('someusername', 'somepassword', function(data){ 
    alert('It looks like your authorized successfully'); 
});