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?
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?
Yanıtlar:
Sen bunu elde edebilirsiniz XMLHttpRequest.responseText
içinde XMLHttpRequest.onreadystatechange
zaman XMLHttpRequest.readyState
eş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.
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ı fetch
kullanarak 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:
Kullanımı kolay yolu XMLHttpRequest
ile pure JavaScript
. Ayarlayabilirsiniz, custom header
ancak isteğe bağlı olarak isteğe bağlı olarak kullanılır.
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.
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();
}
İçinde XMLHttpRequest
, kullanmak XMLHttpRequest.responseText
istisnayı 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);