2012-05-12 64 views
0

我有一個signle html元素,我需要通過jquery將其顯示並隱藏到純javascript xhr請求方法中,現在它始終顯示請求完成時未隱藏的元素/成功,錯誤我想再次隱藏。在javascript xhr請求函數中顯示/隱藏html元素

HTML

<div class="ajax-loading">Loading ..</a> 

XHR方法

function post(_url, _callback,_data){ 

    var xhr = createCORSRequest('POST',_url); 
    if (!xhr){ 
    throw new Error('CORS not supported'); 
    } 
    $('.ajax-loading').show(); 

    xhr.send(_data); 

    /*SUCCESS -- do somenthing with data*/ 
    xhr.onload = function(){ 
    // process the response. 
    _callback(xhr.responseText); 
    $('.ajax-loading').hide(); 
    }; 

    xhr.onerror = function(e){ 
    console.log(e); 
    $('.ajax-loading').show(); 
    }; 
} 

問題是,我始終做到這一點的$。阿賈克斯()語句(錯誤,成功,beforeSend),這時候我已經純JavaScript xhr的要求,我不知道該怎麼做。

更加清楚我想此轉換爲XHR JavaScript的,如下所示:

$.ajax({ 
/*data etc ...*/ 
error:function(){ 
$('.ajax-loading').show(); 
}, 
success:function(){ 
$('.ajax-loading').hide(); 
}, 
beforeSend:function(){ 
$('.ajax-loading').show(); 
} 
}); 

EDITED

我還tryed沒有成功:

function get(_url, _callback){ 
    var xhr = createCORSRequest('GET',_url); 
    if (!xhr){ 
    throw new Error('CORS not supported'); 

    } 


    xhr.send(); 
    xhr.onreadystatechange = function() { 
     if(xhr.readyState == 4 /*COMPLETE STATEMENT*/){ 
      alert(xhr.readyState); 
     } 
}; 
    /*SUCCESS -- do somenthing with data*/ 
    xhr.onload = function(){ 
    // process the response. 
    _callback(xhr.responseText); 

    }; 

    xhr.onerror = function(e){ 
    console.log(e); 
    }; 
} 
+0

一個建議:只有'xhr.onsomeeventname = someFunction'般的語句 – pomeh

回答

1

檢查這一個: Wiki for xmlhttprequest

在xm lHTTPRequest你必須檢查對象的狀態,以瞭解請求發生了什麼。

+0

OK但我新手,對象的陳述,我可以閱讀後,你應該叫'send'方法關於他們所有人,那麼我不使用xhr.open()真的很困惑 – sbaaaang

+0

試試這裏,這似乎相當描述:http://www.javascriptkit.com/jsref/ajax.shtml 而且,如果你想挖掘真的很深:http://www.w3.org/TR/XMLHttpRequest/ – benqus

+0

確定看到了謝謝我要編輯我的問題,因爲它不能按預期方式工作:( – sbaaaang

0

固定

xhr.onloadstart = function(){ 
     $('.ajax-loading').show(); 
    } 

    xhr.onloadend = function(){ 
     $('.ajax-loading').hide(); 
    }