2013-09-18 6 views
0

кто может построчно объяснить, я не понимаю, как этот обратный вызов и прототип работают особенно функции (обратный вызов) в JS файлКак эта функция обратного вызова javascript работает?

user.getUsers(function (theUsers) { 
    $('#users-table-wrapper').html(user.getATable(theUsers)); 
}); 

эта часть в HTML

Js Файла

function User() { 

} 
User.prototype.getUsers = function (callback) { 
    $.ajax({ 
     url: 'posting.php', 
     data: { 
      request:'get-users' 
     }, 
     type:'post', 
     dataType: 'json', 
     success: function(users){ 
//   callback(users); 
      if (callback) { callback(users); } 
     } 
    }); 
} 

Вот мой index.html

theUser не объявлена, но по-прежнему работает. , когда я ввожу funcion (theUser) Насколько я знаю, этот параметр является аргументом или параметром. Его нужно объявить где-то.

Кажется, что это не их ... как это работает?

<!DOCTYPE html> 
<html> 
<head> 
    <title>Users</title> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    <script src="User.js"></script> 
    <script> 
     $(function() { 
      var user = new User(); 
      user.getUsers(function (theUsers) { 
       $('#users-table-wrapper').html(user.getATable(theUsers)); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <div class='main-wrapper'> 
     <h3>Users</h3> 
     <div id="users-table-wrapper"> 
     </div> 
    </div>  
</body> 
</html> 
+0

Что вы не знаете о обратном вызове? это функция, хранящаяся в переменной, которая запускается после события (успех ajax). Что касается 'theUsers', это параметр, который передается ранее упомянутому обратному вызову. –

ответ

0

theUser - это именованный аргумент вашей функции.

При вызове функции он получает значение переданного первого параметра.
Вы звоните функцию здесь:

callback(users); 
1

theUsers является параметром для анонимной функции, которую Вы предоставляете в качестве обратного вызова:

function (theUsers) { 
$('#users-table-wrapper').html(user.getATable(theUsers)); 
}); 

В методе успеха User.getUsers, вы увидите его как это работает:

success: function(users){ 
      if (callback) { callback(users); } 
     } 

Таким образом, если вызов AJAX успешно, и обратный вызов определен, users, содержащий данные, успешно извлеченные, передается в качестве первого аргумента функции обратного вызова. Поскольку первый аргумент называется theUsers в вашем анонимном определении обратного вызова, вот как он появляется внутри метода, делая его доступным для user.getATable(theUsers).

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