2016-07-12 45 views
12

Tipik AJAX ve Fetch API arasındaki fark nedir? Fetch vs. AjaxCall

bu senaryoyu düşünün:

function ajaxCall(url) { 
    return new Promise(function(resolve, reject) { 
    var req = new XMLHttpRequest(); 
    req.open('GET', url); 

    req.onload = function() { 
     if (req.status == 200) { 
     resolve(req.response); 
     } else { 
     reject(Error(req.statusText)); 
     } 
    }; 
    req.onerror = function() { 
     reject(Error("Network Error")); 
    }; 
    req.send(); 
    }); 
} 

ajaxCall('www.testSite').then(x => { 
    console.log(x) 
}) // returns html of site 

fetch('www.testSite').then(x => { 
    console.log(x) 
}) // returns object with information about call 

Bu neyi fetch çağrı getirileridir:

Response {type: "cors", url: "www.testSite", status: 200, ok: true, statusText: "OK"…} 

Neden farklı şeyler çıkmıyor?

fetch'un tipik bir AJAX çağrısı ile aynı şeyi döndürmesinin bir yolu var mı?

+1

[? Getirme API ve XMLHttpRequest arasındaki fark nedir] Olası yinelenen (http kendi başlıklarını eklemenizi sağlar /stackoverflow.com/questions/35549547/what-is-the-difference-between-the-fetch-api-and-xmlhttprequest) – Marco

+0

FYI: Getirme IE11 tarafından desteklenmiyor (bunun için bir Polyfill olmasına rağmen: https://github.com/github/fetch) –

cevap

25

Getirme API farklı veri türleri için yöntemlerde inşa etti kullanabilirsiniz.
Sadece normal metin/html için, bir söz verdiğinizde text() yöntemini kullanırsınız ve bir başkasıyla zincirleyin ve ardından arayın. Davranış nesnenin bir kopyası oluşturur -()

  • klonu aşağıdaki gibi

    fetch('www.testSite').then(x => { 
        return x.text(); 
    }).then(y => { 
        console.log(y); 
    }); 
    

    geri içerik gömmeler olup.

  • error() - Bir ağ hatasıyla ilişkili yeni Yanıt nesnesini döndürür.
  • redirect() - Farklı bir URL ile yeni bir yanıt oluşturur.
  • arrayBuffer() - ArrayBuffer ile gideren bir söz verir.
  • blob() - Bir Blob ile gideren bir söz verir.
  • formData() - Bir FormData nesnesiyle çözümlenen bir söz verir.
  • json() - JSON nesnesiyle özdeşleşen bir söz döndürür.
  • text() - Bir USVString (metin) ile düzelen bir söz verir. /:

Ayrıca sunucuya şeyler göndermek veya vb

fetch('www.testSite', { 
    method : 'post', 
    headers : new Headers({ 
     'Content-Type': 'application/x-www-form-urlencoded' 
    }), 
    body : new FormData(document.getElementById('myform')) 
}).then(response => { 
    return response.json(); // server returned valid JSON 
}).then(parsed_result => { 
    console.log(parsed_result); 
}); 
3

ajaxCall, responseText öğesinin XMLHttpRequest nesnesinden döndürülüyor. Filtreliyor.

Getirme kodundaki yanıt metnini okumalısınız.

fetch('www.testSite').then(x => { console.log(x.text()); }) 

Ayrıca x.json() veya

+0

outpupts undefined – Darlyn

+1

@trolkura Bunu test ettiğiniz URL nedir? "www.testSite" geçerli bir alan adı değil, test ettiğiniz her yerde büyük olasılıkla geçerli olmayan geçerli bir dizin veya dosya adı olabilir. – Xufox

+0

ah üzgünüm, kullanmak istediğim 'text() – epascarello