2017-02-16 42 views
-1

我已經構建了以下事件偵聽器,它將運行函數isValidEmail,傳遞一個回調函數NotInDatabase(),該函數僅在ajax調用完成後才運行。它似乎雖然NotInDatabase()立即運行。任何想法爲什麼會發生?JavaScript es6回調第一次運行

事件偵聽器:

const bindEvents = (form, inputSelector, errorSelector) => { 
    const emailInput = document.getElementById('email'); 
    emailInput.addEventListener('blur', function(){ 
    const emailValue = emailInput.value 
    isValidEmail('http://localhost:3001/user/email/'+emailValue,'data_placeholder', NotInDatabase()) 
    }); 
} 

isValidEmail有回調:

const isValidEmail = (url, data, success) => { 
    const xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 
    xhr.open('POST', url); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState>3 && xhr.status==200) { 
     success(xhr.responseText); 
    } 
    }; 
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded', 'Access-Control-Allow-Origin'); 
xhr.send(data); 
return xhr; 
} 
+0

https://quirksmode.org/js/events_tradmod.html#link2 – Bergi

回答

1

這裏

isValidEmail('http://localhost:3001/user/email/'+emailValue,'data_placeholder', NotInDatabase()) 

你不通過NotInDatabase函數作爲回調到isValidEmail,但通過它返回什麼因爲NotInDatabase()是一個功能離子呼叫。

刪除()解決您的問題

+0

或者換句話說,而不是傳遞迴調,你打電話,然後將它傳遞的回報。 – Carcigenicate

+0

啊有道理,謝謝! – jj1111

相關問題