2011-03-06 70 views
0

我有一個AJAX發佈功能,用於我的服務器&用戶網頁之間的通信。但我在處理來自我的可重用函數中的服務器的響應時遇到了問題。通過使用回調重用我的AJAX發佈功能

如果你看到下面的例子,你會看到函數outputEmailDetailsResult()被稱爲&在行「post(」forgotPass.py「,emailParam,outputEmailDetailsResult());」上運行,即當函數是作爲參數傳遞。但是,它應該只在reation後函數內部運行到服務器響應:

var xmlhttp; 
    function post(dest, params, callbackFunction) 
{ 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      callbackFunction; 
     } 
    } 

    xmlhttp.open("POST",dest,true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send(params); // "fname=Henry&lname=Ford"); 
} 


    function emailLoginDetails() 
{ 
    var emailParam = "email=sam"; // + document.getElementById("forgotEmail").innerText; 
    alert(emailParam); 
    post("forgotPass.py", emailParam, outputEmailDetailsResult()); 
} 

function outputEmailDetailsResult() 
{ 
    try 
    { 
     document.getElementById("statusOutput").value = xmlhttp.responseText; 
    } 
    catch (ex) 
    { 
     document.getElementById("statusOutput").value = "Failed to get response from server"; 
    } 
} 

我是新來傳遞用作參數(我認爲他們是所謂的回調?)&我不確定我這樣做是否正確?

回答

0

移動從回調參數給函數的括號內。喜歡這個。

if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
    callbackFunction(); 
} 

... 

post("forgotPass.py", emailParam, outputEmailDetailsResult); 

你是在叫outputEmailDetailsResult()post之前什麼,所以你實際上是經過結果outputEmailDetailsResult()函數作爲參數,而不是函數本身作爲參數的

2

我想你需要做的是從回調參數中刪除括號;

在你emailLoginDetails()函數:

post("forgotPass.py", emailParam, outputEmailDetailsResult); 
+0

感謝您的回覆,雖然這不起作用 – Mack