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.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.
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:
Kullanımı kolay yolu XMLHttpRequestile pure JavaScript. Ayarlayabilirsiniz, custom headerancak 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.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);