2012-04-27 147 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状态代码。这并不是说没有图书馆没有时间和地点去做事情  —当然有  —就是这样,通常情况下,建立在别人的工作之上,而不是完全靠自己完成。