JavaScript console.log hataya neden oluyor: “Ana iş parçasındaki zaman uyumlu XMLHttpRequest kullanımdan kaldırıldı…”


386

Firefox hata ayıklayıcısını kullanmadan farklı değişkenlerin durumunu kontrol etmek için konsola günlükler ekliyorum.

Ancak, dosyama bir console.logyer eklediğim birçok yerde main.js, kendime sevimli küçük el yazısı mesajlarım yerine aşağıdaki hatayı alıyorum:

Ana iş parçasındaki zaman uyumlu XMLHttpRequest, son kullanıcının deneyimine zararlı etkileri nedeniyle kullanımdan kaldırılmıştır. Daha fazla yardım için http://xhr.spec.whatwg.org/

console.logBu hataya neden olmayacak kod kullanımıma hangi alternatifleri veya paketleyicileri ekleyebilirim?

"Yanlış mı yapıyorum"?


8
Etkin bir uzak günlük eklentisi türü veya başka bir şey yoksa, bir console.log () çağrısının ajax çağrısına neden olacağını görmüyorum.
Marc B

Ajax araması yaptığından emin değilim. Bir ekran görüntüsü eklesem yardımcı olur mu?
Nathan Basanese

6
xmlhttprequest temel olarak bir ajax isteğidir.
Marc B

14
<script>$.ajaxPrefilter(function( options, originalOptions, jqXHR ) { options.async = true; });</script> bu uyarıyı kaldıracaktır. Aynı sorun için burada görebilirsiniz .
Akilsree1

1
Ben sadece yazı yerine get kullandım, yardımcı oldu. jQuery.
Stas Kazanin

Yanıtlar:


278

Tembel olduğumda ve bana iade edilen içeriğin bir parçası olarak bir komut dosyası etiketi eklediğimde bu oldu. Gibi:

Kısmi HTML İçeriği:

<div> 
 SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script> 

En azından benim durumumda, böyle HTML içeriğini xhr aracılığıyla döndürürseniz, jQuery'nin bu komut dosyasını almak için bir çağrı yapmasına neden olacağı anlaşılıyor. Bu çağrı, yüklemeye devam etmek için komut dosyasına ihtiyacınız olduğunu varsaydığı için yanlış bir zaman uyumsuz bayrağıyla gerçekleşir.

Bunun gibi durumlarda, bir tür bağlayıcı çerçeveye bakarak ve sadece bir JSON nesnesi döndürerek veya arka ucunuza ve templating'e bağlı olarak komut dosyalarınızı yükleme şeklinizi değiştirerek daha iyi hizmet edersiniz.

Ayrıca kullanabilirsiniz jQuery engetScript() alakalı komut kapmak için. İşte bir keman, jQuery örneğinin sadece düz bir kopyasıdır, ancak komut dosyaları bu şekilde yüklendiğinde atılan uyarıları görmüyorum.

Misal

<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>

http://jsfiddle.net/49tkL0qd/


8
hata çünkü OP bir yerde senkronize bir XMLHttpRequests kullanıyor, ben nedeniyle jquery sanmıyorum çünkü o kullanmak gibi görünmüyor ... Ancak bu <script>bir geri arama dediğin gibi bir yüklemeye çalıştığınızda bana oluyor bir ajax zaman uyumsuz çağrısının. Benim ajax çağrı ancak geri aramasında yaptığım eşzamansızsa $('#object').html(data)veri parçasıdır nerede htmlile <script>bu hat hata görünür yürütülür ve ne zaman js console. 1 !!! teşekkürler :).
albciff

2
Bu proje için aslında JQuery kullandım.
Nathan Basanese

1
@ 37coins, cevap buysa; olarak işaretleyin .. ve javascript etiketini jQuery ile değiştirin.
Brett Caswell

3
Bu benim sorunumdu ve büyük olasılıkla OP'nin problemi de - OP lütfen cevap olarak işaretlemeyi düşünün. Burada daha yüksek oy kullanan cevap şu anda bu sorunu yaşayan insanlara yardım etmek için hiçbir şey yapmıyor, bu nedenle bu cevabı kabul etmek başkalarına çok yardımcı olacaktır.
Nick Coad

1
sadece FYI jQuery getScript önbelleğe almayı keser. Sanırım .ajax aynı şeyi yapacak ve önbelleklemeye izin verecek
Ronnie Royston

75

Uyarı iletisi, zaman uyumsuz bayrağı false olarak ayarlanmış ana iş parçacığındaki XMLHttpRequest isteğinden kaynaklanıyor olabilir.

https://xhr.spec.whatwg.org/#synchronous-flag :

Senkron XMLHttpRequest, işçilerin dışındaki son kullanıcının deneyimine zararlı etkileri olduğu için web platformundan kaldırılma sürecindedir. (Bu uzun yıllar süren uzun bir süreçtir.) JavaScript genel ortamı bir belge ortamı olduğunda geliştiriciler zaman uyumsuz argüman için yanlış iletmemelidir. Kullanıcı aracıları, geliştirici araçlarında bu tür kullanım konusunda uyarmaya şiddetle teşvik edilir ve gerçekleştiğinde bir InvalidAccessError istisnası atmayı deneyebilir.

Gelecekteki yön, yalnızca çalışan iş parçacıklarında XMLHttpRequest öğelerine izin vermektir. Mesajın bu konuda bir uyarı olması amaçlanmıştır.


6
Hayır, async bayrağı false olarak ayarlanmış şekilde ana iş parçacığı içindeki XMLHttpRequest isteği nedeniyle ileti uyarısı PRESUMABLY şeklindedir . Bu Firefox'ta bir hata olabilir (ama muhtemelen bir jQuery özelliği / uygulaması); her iki durumda da, spesifikasyonun bir kısmını tanımlamak console.log, bu uyarıları gönderdiğini iddia eden bir sorunun cevabı olarak nasıl değerlendirilir ?
Brett Caswell

1
@Brett - Cevabımın son iki cümlesi, yaptığım özelliğin bir kısmını neden dahil ettiğimi açıklıyor. Cevabımı daha kesin olacak şekilde düzenleyeceğim.
PedanticDan

2
tüm bunlarla birlikte, bu cevapta belirttiğiniz her şey doğru bilgidir; ayrıca, muhtemel sorunla ilgili olması muhtemeldir; yani, bu uyarının yükseltilmesi hata ayıklayıcının davranışını ve / veya kararlılığını etkiler. Bu nedenle, geçici çözüm, uyarının nedenini düzelterek uyarıyı önlemek için çok iyi olabilir.
Brett Caswell

Yerel hata ayıklama için etkinleştirmek üzere about: bayrağı eklemelidirler. Sync XHR, localhost çalıştıran çerçeveleri işleme / hata ayıklama için çok yararlı olabilir.
user2800679

62

Ben de aynı sorunla karşı karşıya kaldım ama async: true koyarak düzeltebiliyordum. Varsayılan olarak doğru olduğunu biliyorum ama açıkça yazdığımda işe yarıyor

$.ajax({
   async: true,   // this will solve the problem
   type: "POST",
   url: "/Page/Method",
   contentType: "application/json",
   data: JSON.stringify({ ParameterName: paramValue }),
});

2
Benim durumumdaki neden bu değildi ... sadece zaman
uyumsuzluğu

@Irfan benim durumumda senkronizasyon ayarlıyordu: yanlış yardımcı oldu!
t_plusplus

34

Visual Studio 2015 / 2017'nin canlı hata ayıklayıcısı kullanımdan kaldırılmış çağrıyı içeren kodu enjekte ediyor.


13
Bu uyarıyı neden gördüğümü anlamaya çalışmak için epey zaman geçirdim; Başkalarının biraz zaman kazanabilmesi için en uygun SO sorusunu paylaşacağımı düşündüm.
Charlie

22

Bazen bir komut dosyası ajax yüklemek, ancak komut dosyası yüklenene kadar hazır olan belgeyi geciktirmek gerekir .

jQuery bunu holdReady()işlevle destekler .

Örnek kullanım:

$.holdReady(true);                              //set hold
function releaseHold() { $.holdReady(false); }  //callback to release hold
$.getScript('script.js', releaseHold);          //load script then release hold

Gerçek komut dosyası yüklemesi eşzamansızdır ( hata yok ), ancak JavaScript'inizin geri kalanı belge hazır olduktan sonra çalışırsa efekt eşzamanlıdır .

Bu gelişmiş özellik , DOM hazır olsa bile hazır olayın gerçekleşmesine izin vermeden önce jQuery eklentileri gibi ek JavaScript yüklemek isteyen dinamik komut dosyası yükleyicileri tarafından kullanılır.

Belgeler:
https://api.jquery.com/jquery.holdready


GÜNCELLEME 7 Ocak 2019

JQMIGRATE tarihinden itibaren :

jQuery.holdReady () kullanımdan kaldırıldı

Neden:jQuery.holdReady() yöntem sayfanın küresel performansı üzerindeki olumsuz etkisi nedeniyle kaldırılmıştır. Bu yöntem, sayfadaki tüm kodların uzun süre başlatılmasını önleyebilir.

Çözüm: Sayfayı, tüm jQuery hazır işleyicilerinin geciktirilmesini gerektirmeyecek şekilde yeniden yazın. Bu, örneğin, yalnızca çalıştırılması güvenli olduğunda gecikmeyi gerektiren kodun geç yüklenmesi ile gerçekleştirilebilir. Bu yöntemin karmaşıklığı nedeniyle, jQuery Migrate işlevselliği doldurmaya çalışmaz. JQuery Migrate ile kullanılan temel jQuery sürümü artık jQuery.holdReady()bu uyarı görüntülendikten kısa bir süre sonra kod başarısız olur.



13

@Webgr kısmi cevap aslında bu uyarı @ konsol günlüğünde hata ayıklama yardımcı oldu, utanç bu cevabın diğer kısmı çok sayıda aşağı oy getirdi :(

Her neyse, işte bu uyarının nedeninin ne olduğunu nasıl öğrendim:

  1. DevTools'u getirmek için Chrome Tarayıcı> F12'ye basın
  2. Çekmece menüsünü açın (sağ üstteki Chrome 3 dikey noktalarında)
  3. Konsol altında > Log XMLHttpRequests seçeneğini işaretleyin
  4. Hata veren sayfanızı yeniden yükleyin ve konsol günlüğündeki her ajax isteğinde neler olduğunu gözlemleyin.

Benim durumumda, başka bir eklenti yükleniyordu 2 her ajax çağrısından sonra .js kütüphanesi , bu kesinlikle gerekli değildi. Rogue eklentisinin devre dışı bırakılması uyarıyı günlükten kaldırdı. Bu noktadan sonra, sorunu kendiniz çözmeye çalışabilirsiniz (örneğin, komut dosyalarının yüklenmesini belirli sayfalara veya etkinliklere sınırlayın - bu, burada bir cevap için çok spesifiktir) veya çözmek için 3. taraf eklenti geliştiricisiyle iletişime geçin.

Umarım bu birine yardımcı olur.


// , Cevap için teşekkürler! Bu soruya yalnızca Firefox'tan bahsediliyor. Chrome'da gerçekleştiğini görmek istiyorum. Bu, sorunu gerçekten düzeltmek yerine, yalnızca uyarıyı kaldırmış gibi görünüyor. Bu doğru mu?
Nathan Basanese

Görünüşe göre Chrome'un DevTools'ta Firefox sürümünden daha gelişmiş şeyleri var. Firefox'ta bildirilmemesi, mevcut olmadığı anlamına gelmez. Bu, sorunumu tamamen düzeltti, sadece gizlemedim. Her ajax çağrısında 'yeniden yüklenen' sorunlu eklentiden ve sayfadan komut dosyalarını kaldırdım.
dev101

//, Sizce Firefox geliştiricileriyle bir sorun yaratmaya değer mi?
Nathan Basanese

Hayır, gerekli değil. Durumumu en son Firefox ve "Ana iş parçacığında Senkronize XMLHttpRequest ile tekrar test ettim ..." uyarısı kesinlikle konsol günlüğünde bildirildi. Yani, en azından benim durumumda, tarayıcıya özgü bir sorun değildi. Şimdi, her ajax isteğinden sonra çağrılan .js kaynaklarını izleyerek Firefox'u Ağ sekmesi üzerinden XMLHttpRequest hatalarını ayıklamak için nasıl kullanabilirsiniz. Chrome'da daha akıcı / filtrelenmiş olmasına rağmen aynı şeyi yapar. developer.mozilla.org/tr-TR/docs/Tools/Network_Monitor
dev101

8

Tüm etkileyici cevaplara bakıyordum. Bence ona problem veren kodu vermeli. Aşağıdaki örnek göz önüne alındığında, page.php içindeki jquery'ye bağlanacak bir komut dosyanız varsa, bu bildirimi alırsınız.

$().ready(function () {
    $.ajax({url: "page.php",
        type: 'GET',
        success: function (result) {
        $("#page").html(result);
   }});
 });

6

Aşağıdaki durumda böyle bir uyarı alıyorum:

1) içeren dosya1 <script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>. Sayfada giriş alanları var. Giriş alanına bir değer girip butonuna tıklıyorum. Jquery harici php dosyasına girdi gönderir.

2) harici php dosyası da jquery içerir ve harici php dosyasında ben de dahil <script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>. Çünkü bu uyarıyı alırsam.

<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>Harici php dosyasından kaldırıldı ve uyarı olmadan çalışır.

İlk dosyayı (dosya1) yüklemede anladığım gibi, ben yüklerim jquery-1.10.2.jsve sayfa yeniden yüklenmez (jquery kullanarak harici php dosyasına veri gönderir $.post), sonra var jquery-1.10.2.jsolmaya devam eder. Bu yüzden tekrar yüklemek gerekmez.


5

"Example.com/files/text.txt" gibi sorguda URL ayarladığımda bu istisnayı aldım. URL’yi " http://example.com/files/text.txt " olarak değiştirdim ve bu kural dışı durum kayboldu.


Sorunumun URL ile de ilgili olduğu anlaşılıyor. Bir komut dosyasını üzerinde çalışmak için geçici bir URL'ye kopyaladım ve hata geldiğinde. Orijinal URL'den değil.
jeffery_the_wind

5

Ve bir can.js betiğini diğerine dahil etmek için bu istisnayı aldım, örneğin,

{{>anotherScript}}

Bu ana neden gibi görünüyor (ek <scripts> yükleme ve bunları
DOM'daki

5

Bir MVC uygulamasında, bir Kendal Penceresini PartialView () yerine View () döndüren bir yöntemle açtığım için bu uyarıyı aldım. Görünüm (), sayfanın tüm komut dosyalarını yeniden kurtarmaya çalışıyordu.


5

ZF2'de başıma geliyordu. Modal içeriğini yüklemeye çalışıyordum, ancak düzeni daha önce devre dışı bırakmayı unuttum.

Yani:

$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;

5

@Nycen gibi, Cloudfare bağlantısı nedeniyle de bu hatayı aldım. Benimki Select2 içindi eklentisi .

düzeltmek için kaldırdım

 src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"

ve hata giderildi.


5
  1. Chrome'da, press F12
  2. Geliştirme araçları-> basın F1.
  3. Ayarlar-> genel-> Görünüm: "Don't show chrome Data Saver warning"- bu onay kutusunu ayarlayın.
  4. Ayarlar-> genel-> Konsol: "Log XMLHTTPRequest"- bu onay kutusunu da ayarlayın.

Zevk almak



4

Benim durumumda bu neden oldu flexie tarafından sunulan "CDNJS Seçimleri" uygulamanın parçasıydı senaryo Cloudflare .

Cloudflare göre "Bu uygulama Mart 2015'te kullanımdan kaldırılıyor". Kapattım ve mesaj anında kayboldu.

Uygulamalara https://www.cloudflare.com/a/cloudflare-apps/alanadiniz.com.tr adresini ziyaret ederek erişebilirsiniz.

Not: Bu bu konu benim cevap bir kopyasıdır Eşzamanlı XMLHttpRequest uyarı ve <script> (Her ikisi de bir çözüm ararken ziyaret etti)


3

Bunu aşağıdaki adımlarla düzelttim:

  1. CDN komut dosyalarınızı kontrol edin ve yerel olarak ekleyin.
  2. Komut dosyası içeriklerinizi başlık bölümüne taşıyın.

3

Benim durumumda, bir Rails'i kısmi render layout: falseolarak oluşturuyordum, bu da <head>etiketteki tüm komut dosyaları da dahil olmak üzere tüm düzeni yeniden oluşturuyordu . render layout: falseDenetleyici eylemine eklemek sorunu çözdü.


3

Benim için sorun, bir OK isteğinde, ajax yanıtının tablo gibi iyi biçimlendirilmiş bir HTML dizesi olmasını bekliyordum, ancak bu durumda, sunucunun bir hata sayfasına yönlendirerek istekle ilgili bir sorun yaşıyordu, ve bu nedenle hata sayfasının HTML kodunu (bir <scriptyerde bir etiketi vardı .


2

Soru 2014'te gündeme geldi ve 2019, bu yüzden daha iyi bir seçenek aramanın iyi olduğunu düşünüyorum.

fetchJavascript'te size daha fazla esneklik sağlayan api'yi kullanabilirsiniz .

örneğin, bu koda bakın

fetch('./api/some.json')
    .then((response) => {
        response.json().then((data) => { 
            ... 
        });
    })
    .catch((err) => { ... });

Bu saf js, eklenti gerekmez?
Alok

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.