Как создать ajax-запрос вручную?

-2

Мне нужно отправить запрос на действие/Главная/Старт

Набор ответов в элементе id 'js_script'.

Я не могу найти, как это сделать.

  • 2
    Почему вы имеете в виду вручную? из ASP или из JavaScript? Также вы можете использовать библиотеку, как jQuery?
  • 0
    Когда я сталкиваюсь с проблемой в JavaScript, я не "нахожу", как это сделать, просматривая онлайн, я разрабатываю, как это сделать. К сожалению, подавляющее большинство JS-программистов слишком ленивы, чтобы сделать это, и вместо этого используют jQuery.
Показать ещё 4 комментария
Теги:
asp.net-mvc

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;
}
0

Мне нужно угадать, что вы имеете в виду, но в основном вы используете объект XMLHttpRequest для выполнения ajax-запросов. Это инновация Microsoft, которую другие браузеры приняли и которая сейчас находится в процессе стандартизации. В современных браузерах это выглядит так:

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 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, такие как jQuery, Prototype, YUI, Closure или любой другой. Они сглаживают различия браузера для вас, добавляют множество полезных функций и позволяют сосредоточиться на выполнении вашей конкретной задачи, а не беспокоиться о (скажем) кодах состояния HTTP. Это не значит, что нет времени и места для работы без библиотек - конечно, есть - так обычно, можно более продуктивно строить работу других, чем самостоятельно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню