-3

我需要发送请求以采取行动 /Home/Start

元素 id 'js_script' 中的响应集。

我找不到怎么做。

4

2 回答 2

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;
}
于 2012-04-27T16:55:32.553 回答
0

我不得不猜测您的意思,但基本上,您使用该XMLHttpRequest对象来执行 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 库(如jQueryPrototypeYUIClosure其他任何一个)的众多原因之一。它们为您消除浏览器差异,添加许多实用功能,让您专注于完成特定任务,而不是担心(比如说)HTTP 状态代码。这并不是说没有图书馆就没有时间和地点——当然有——只是通常情况下,一个人在别人的工作上比完全靠自己更有效率。

于 2012-04-27T16:57:59.713 回答