如何手动创建ajax请求?

时间:2012-04-27 16:42:42

标签: javascript ajax asp.net-mvc

我需要发送请求到操作/主页/开始

在元素id'js_script'中设置响应。

我找不到怎么做。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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上进行。)


在旧浏览器上创建对象的复杂性是我推荐使用任何合适的JavaScript库的众多原因之一,如jQueryPrototypeYUI,{{3 },或Closure。它们为您平滑浏览器差异,添加了许多实用功能,让您专注于完成特定任务,而不是担心(比如说)HTTP状态代码。这并不是说在没有图书馆的情况下没有时间和地点 - 当然有 - 只是通常情况下,人们可以更有成效地建立他人的工作,而不是完全依靠自己的工作。