2012-04-27 125 views
-3

我需要發送行動請求/首頁/開始如何手動創建ajax請求?

在元素id'js_script'中設置的響應。

我找不到如何操作。

+2

爲什麼你的意思是通過手動?從ASP或從JavaScript?你也可以使用類似jQuery的庫嗎? – GillesC 2012-04-27 16:45:01

+0

當我在JavaScript中遇到問題時,我不會通過在線查找來「發現」如何執行該操作,而是查找*如何執行操作。可悲的是,絕大多數JS程序員都懶得做這個,而是使用jQuery來代替。 – 2012-04-27 16:45:16

+0

@Kolink:jQuery很好的一點是跨瀏覽器兼容性。如果你弄清楚了一個問題,但它只適用於Chrome,不適用於Firefox?加上在香草JavaScript中的AJAX是醜陋的:-P – 2012-04-27 16:47:27

回答

0

如果你想要的是一個基本的要求,那麼你可以很容易地做到這一點,而不與功能的任何圖書館發現這裏http://www.quirksmode.org/js/xmlhttp.html

function sendRequest(url,callback,postData) { 
    var req = createXMLHTTPObject(); 
    if (!req) return; 
    var method = (postData) ? "POST" : "GET"; 
    req.open(method,url,true); 
    req.setRequestHeader('User-Agent','XMLHTTP/1.0'); 
    if (postData) 
     req.setRequestHeader('Content-type','application/x-www-form-urlencoded'); 
    req.onreadystatechange = function() { 
     if (req.readyState != 4) return; 
     if (req.status != 200 && req.status != 304) { 
//   alert('HTTP error ' + req.status); 
      return; 
     } 
     callback(req); 
    } 
    if (req.readyState == 4) return; 
    req.send(postData); 
} 

var XMLHttpFactories = [ 
    function() {return new XMLHttpRequest()}, 
    function() {return new ActiveXObject("Msxml2.XMLHTTP")}, 
    function() {return new ActiveXObject("Msxml3.XMLHTTP")}, 
    function() {return new ActiveXObject("Microsoft.XMLHTTP")} 
]; 

function createXMLHTTPObject() { 
    var xmlhttp = false; 
    for (var i=0;i<XMLHttpFactories.length;i++) { 
     try { 
      xmlhttp = XMLHttpFactories[i](); 
     } 
     catch (e) { 
      continue; 
     } 
     break; 
    } 
    return xmlhttp; 
} 
0

我具有你的意思猜測,但基本上,您使用XMLHttpRequest object做ajax請求。這是其他瀏覽器採用的微軟創新技術,目前正在進行標準化。它在現代瀏覽器中看起來像這樣:

function sendRequest() { 
    var request = new XMLHttpRequest(); 
    request.open('GET', '/Home/Start', false); 
    request.onreadystatechange = handleStateChange; 
    request.send(null); 

    function handleStateChange() { 
     if (request.readyState === 4) { 
      // The request is complete; did it work? 
      if (this.status >= 200 && this.status < 300) { 
       // Yes, you can use the data on request.responseText 
       // or (for requests with XML replies) request.responseXML 

       // In our case, let's say we want to put all of the text 
       // into the element with the `id` "js_script": 
       var elm = document.getElementById("js_script"); 
       elm.innerHTML = request.responseText; 
      } 
     } 
    } 
} 

這顯然很簡單。在舊的瀏覽器,你要做的一對夫婦檢查圍繞創建對象(new XMLHttpRequest在IE7不工作,例如,但也有辦法做到這一點在IE7)


圍繞創建併發症舊版瀏覽器上的對象是我推薦使用諸如jQuery,Prototype,YUI,Closureany of several others之類的任何正常JavaScript庫的許多原因之一。他們可以平滑瀏覽器的差異,增加許多實用功能,並讓您專注於完成特定任務,而不用擔心(比如說)HTTP狀態代碼。這並不是說沒有圖書館沒有時間和地點去做事情  —當然有  —就是這樣,通常情況下,建立在別人的工作之上,而不是完全靠自己完成。