XMLHttpRequest yanıtı nasıl alınır?


187

Uzak bir URL içeriğini yüklemek ve erişilen sitenin HTML'si bir JS değişkeninde depolamak için XMLHttpRequest nasıl kullanılacağını bilmek istiyorum.

Diyelim ki http://foo.com/bar.php HTML'sini yüklemek ve uyarmak isteseydim bunu nasıl yapardım?



2
: JS Kütüphaneleri için açık varsa, jQuery gerçekten .Load () metodu ile bu basitleştiren api.jquery.com/load
scunliffe

20
Tanrıya şükür, nihayet jQuery adres olmayan bir google sonucu: |
Sam Vloeberghs

Yanıtlar:


277

Sen bunu elde edebilirsiniz XMLHttpRequest.responseTextiçinde XMLHttpRequest.onreadystatechangezaman XMLHttpRequest.readyStateeşittir XMLHttpRequest.DONE.

İşte bir örnek (IE6 / 7 ile uyumlu değil).

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == XMLHttpRequest.DONE) {
        alert(xhr.responseText);
    }
}
xhr.open('GET', 'http://example.com', true);
xhr.send(null);

Yalnızca IE6 / 7 ile değil, tarayıcıya özgü bazı bellek sızıntılarını veya hataları da kapsayacak şekilde daha iyi çapraz tarayıcı uyumluluğu için ve ayrıca ajaxical istekleri tetiklerken daha az ayrıntı için jQuery kullanabilirsiniz .

$.get('http://example.com', function(responseText) {
    alert(responseText);
});

Localhost'ta çalışmadığınızda JavaScript için aynı başlangıç ​​politikasını dikkate almanız gerektiğini unutmayın. Alan adınızda bir proxy komut dosyası oluşturmayı düşünebilirsiniz.


Bu vekili nasıl yapabiliriz?
Chris - Jr

bir cazibe gibi çalışır :)
Anurag

29

Bakmanızı öneririm fetch. ES5 eşdeğeri ve Promises kullanıyor. Çok daha okunabilir ve kolayca özelleştirilebilir.

const url = "https://stackoverflow.com";
fetch(url)
    .then(
        response => response.text() // .json(), etc.
        // same as function(response) {return response.text();}
    ).then(
        html => console.log(html)
    );

Node.js'de şunları fetchkullanarak içe aktarmanız gerekir :

const fetch = require("node-fetch");

Senkronize olarak kullanmak istiyorsanız (üst kapsamda çalışmaz):

const json = await fetch(url)
  .then(response => response.json())
  .catch((e) => {});

Daha fazla bilgi:

Mozilla Belgeleri

Kullanabilir miyim (% 94 Ekim 2019)

Matt Walsh Eğitimi


27

Kullanımı kolay yolu XMLHttpRequestile pure JavaScript. Ayarlayabilirsiniz, custom headerancak isteğe bağlı olarak isteğe bağlı olarak kullanılır.

1. POST Yöntemi Kullanarak:

window.onload = function(){
    var request = new XMLHttpRequest();
    var params = "UID=CORS&name=CORS";

    request.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            console.log(this.responseText);
        }
    };

    request.open('POST', 'https://www.example.com/api/createUser', true);
    request.setRequestHeader('api-key', 'your-api-key');
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    request.send(params);
}

POST yöntemini kullanarak parametreler gönderebilirsiniz.

2. GET Yöntemi Kullanarak:

Lütfen aşağıdaki örneği çalıştırın ve bir JSON yanıtı alırsınız .

window.onload = function(){
    var request = new XMLHttpRequest();

    request.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            console.log(this.responseText);
        }
    };

    request.open('GET', 'https://jsonplaceholder.typicode.com/users/1');
    request.send();
}


Benim için iyi çalışıyor.
Mayur S

İyi örnek. İyi çalışıyor.

16

İçinde XMLHttpRequest, kullanmak XMLHttpRequest.responseTextistisnayı aşağıdaki gibi yükseltebilir

 Failed to read the \'responseText\' property from \'XMLHttpRequest\': 
 The value is only accessible if the object\'s \'responseType\' is \'\' 
 or \'text\' (was \'arraybuffer\')

Aşağıdaki gibi XHR yanıtına erişmenin en iyi yolu

function readBody(xhr) {
    var data;
    if (!xhr.responseType || xhr.responseType === "text") {
        data = xhr.responseText;
    } else if (xhr.responseType === "document") {
        data = xhr.responseXML;
    } else {
        data = xhr.response;
    }
    return data;
}

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        console.log(readBody(xhr));
    }
}
xhr.open('GET', 'http://www.google.com', true);
xhr.send(null);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.