2015-11-11 3 views
1

У меня возникает проблема с некоторыми базовыми функциями JS при попытке добавить обратный вызов, который должен запускать другую функцию с параметрами.Функция Javascript с обратным вызовом и параметры

Вот моя электронная функция:

function sendEmail(template, to, cc, bcc, callback, optional=null){ 

// Define vars needed 
var body = '', 
    subject = ''; 

// Based on the template.. 
switch(template){ 

    case 'privateNote': 

     // Define the subject 
     subject = 'Tool Request - Private Note Added'; 

     // Define our body 
     body += 'Hello, <br /><br />'; 
     body += 'A new private note has been added to Request #' + requestID + '.<br/><br/>'; 
     body += 'To visit the request, click the following link: <a href="' + window.location.protocol + "//" + window.location.host + "/tool/Request2.php?id=" + requestID + '">' + window.location.protocol + "//" + window.location.host + "/tool/Request2.php?id=" + requestID + '</a>.'; 
     body += '<br /><br />'; 
     body += '<em>Message created by ' + userFirst + ' ' + userLast + '</em>'; 

} 

// Send our email 
$.ajax({ 
    url: "../resources/Classes/class.email.php", 
    type: "POST", 
    cache: false, 
    data: { 
     from: "[email protected]", 
     to: to, 
     cc: cc, 
     bcc: bcc, 
     subject: subject, 
     body: body 
    }, 
    error: function(err) { 
     alert(err.statusText); 
    }, 
    success: function(data) { 
     // Handle Callback 
     callFunction(callback); 
    } 
}); 
} 

// Callbacks 
function callFunction(func) { 
    func(); 
} 

// Reload the page 
function refresh(){ 
    location.reload('true'); 
} 

Это, как я использую функцию:

sendEmail('privateNote', toArray, '', '', refresh, obj); 

Это все работает отлично, как и ожидалось, однако я столкнулся с проблемой.

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

То, что я пытался сделать, это:

var remove = sendEmail('privateNote', toArray, '', '', refresh, obj); 

// Trigger Email to those who are added to the request 
// However, I was trying to send a the other email with params as a callback instead of refreshing the page. 

sendEmail('privateNote', toArray, '', '', remove, obj); 

Проблема при этом в том, что это, кажется, стрелять и в то же время, не дожидаясь одного, чтобы закончить вызывает некоторые проблемы асинхронное.

Есть ли способ сделать это правильно? Я знаю, что это не самый красивый способ обработки писем, но пока все работает нормально, когда приходится иметь дело только с одним электронным письмом.

ответ

4

Это сразу вызывает функцию sendEmail():

var remove = sendEmail('privateNote', toArray, '', '', refresh, obj); 

Поскольку sendEmail() не возвращает ничего, remove является undefined.

Чтобы сделать это правильный обратный вызов, завернуть его в function():

var remove = function() { 
    sendEmail('privateNote', toArray, '', '', refresh, obj); 
} 
+2

Это работало отлично, красиво сделано. – SBB

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