2012-05-02 68 views
0
function AJAX(url,data) 
{ 
    var xmlhttp; 
    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) 
     { 
      return xmlhttp.responseText; 
     } 
    } 
    xmlhttp.open("POST",url,true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send(data); 
} 

var a = AJAX('log.php','username=Leonard&password=asjdklaslkjdalskjdlaksjda'); 

當函數返回它給我「未定義」。如何使用POST [不使用jQuery]從AJAX javascript返回結果?

+0

沒有公認的答案解決您的問題,還是你只是接受沒有測試? – Christoph

+0

@Christoph停止製作諷刺評論 - 你對這兩個(相同)答案的評論是不正確的。 – Alnitak

回答

0

你的函數是異步的 - 它不會等待AJAX​​調用在返回前完成,所以沒有結果返回。

試試這個:

function AJAX(url, data, callback, ctx) 
{ 
    var xmlhttp; 
    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) 
     { 
      callback.call(ctx, xmlhttp.responseText); 
     } 
    } 
    xmlhttp.open("POST",url,true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send(data); 
} 

注意你現在怎麼也得提供一個 「回調函數」 是會被調用的AJAX完成時:

AJAX('log.php','username=Leonard&password=asjdklaslkjdalskjdlaksjda', 
    function(result) { 
     // do stuff with result 
    } 
); 

編輯ctx參數我添加是可選的 - 這樣你就可以設置調用回調時的this。如果回調是一個對象的方法而不是獨立函數,這個(不是雙關語意圖)將會很有用。

+0

ctx是什麼? – leo0110

+0

@ user1358505它是可選的,以便您可以設置回調中的「this」應該是什麼 - 如果回調是對象的方法,則很有用。 – Alnitak

+0

你不需要回調,因爲state = 4的onreadystatechange實際上會觸發,當ajax響應返回時...... – Christoph

0

當你returns xmlhttp.responseText,你回到onreadystatechange財產。不是很有用,是嗎?

相反,使用異步行爲做到以下幾點:

function AJAX(url, data, callback) { 

    // Your stuff 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState === 4) { 
      callback(xmlhttp.responseText) 
     } 
    } 

    // Your other stuff 

} 

然後,你可以用它喜歡:

AJAX(url, data, function(responseText) { 
    // use responseText there 
})