2011-11-16 29 views
11

Bir raylı uygulamasına sahibim ve pjax istekleri ile garip davranmaya devam ediyorum. Geliştirme günlüklerime baktığımda iki isteğin yapıldığını görebiliyordum. İlk istek pjax ve bir sonraki değil. Sonuç olarak sayfa hala yeniden yüklenir.jquery pjax istek gönderme iki kez gönderiliyor

Bu konuda bana yardımcı olabilecek herhangi bir kişi varsa minnettarım.

+2

Sorunuzun seyrek açıklamasından daha fazlasını görmeliyiz. Lütfen bazı ilgili kodları, günlük dosyalarını veya diğer şeyleri gönderin. – Bojangles

+0

Aynı konuya koşuyorum. [Cloudfoundry'da] bir örnek var (http://scaffolding.cloudfoundry.com/book/list). Sayfalandırma ve tablo sıralama bağlantıları pjax olmalıdır, ancak firebug kullanarak, bir sayfanın yenilenmesini takiben bir XHR isteği yaptıklarını gözlemleyebilirsiniz. Orada çalışan uygulama için kaynak kodu [burada GitHub] (https://github.com/robfletcher/grails-enhanced-scaffolding/tree/pjax) ilgili dosya muhtemelen 'grails.list.js' –

+1

Firebug ile Benim durumumda, pjax'ın varsayılan başarı işleyicisinin, verdiğim parça seçici kullanarak herhangi bir içerik bulamaması olduğunu belirledim. Bu durumda [pjax kodu] 'na (https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js#L106) bakarak tam sayfa yenilemesi gerçekleştirecektir. AJAX yanıtı iyi görünüyor ve seçici geçerli gibi seçicinin neden çalışmadığı net değil. –

cevap

14

JQuery pjax eklentisi, hedef sayfayı yeniden yükleyecek varsayılan bir hata işleyicisine sahiptir. Bu hata işleyici, zaman aşımı geçtiğinde çağrılır, hangi pjax çok düşük ayarlar. Sonuç olarak, isteğiniz çok uzun sürerse, iki aynı isteği görürsünüz. Pjax isteği (muhtemelen _pjax öznitelik kümesiyle birlikte), ardından başka bir pjax olmayan istek var. Tarayıcıda büyük olasılıkla sayfanın tamamını yeniden yükleyeceksiniz. Durumumda bulduğum bir şey, yanıtın o kadar uzun sürmemesiydi. Ancak, döndürülen HTML bir flash gömme içeriyordu. Pjax kodunun, flash gömülü yüklenmeden önce veya sonra yanıtını alıp almadığından emin değilim. sorunu çözmek için

, bu doğrudan pjax çağırıyor Tabii

$.pjax({ 
     url: xhr.getResponseHeader('Location'), 
     container: '#container', 
     timeout: 4000 // pick a suitable timeout 
     }); 

... gibi görünmek benim PJax kodunu değiştirdi. Doğrudan aramadıysanız, benzer bir çözüm bulmanız gerekir.

+0

Hayatımı kurtardım! :) İki istek göndermiyordu, ama sadece ilk ve sonra yeniden yükleme iptal edildi .. Neyse - mükemmel çalışıyor! –

1

Ayrıca bu soruna da girdim - tarayıcı önbelleğe alma ile ilgili bir sorun gibi görünüyor. Tarihi ve önbelleği temizlersem Chrome'da gerçekleşmeyi durdurduğumu fark ettim. Henüz çözemedim, ancak tarayıcıda önbelleğe almayı devre dışı bırakmanın bir sorun olduğunu mu sanıyorsunuz?

+1

Sorunum, isteğin zaman aşımına uğradığıydı. Zaman aşımı: pjax işlevinde 2000, benim için düzeltildi. Ayrıca, düzenimin bir parçası olarak boş bir pjax kabı buldum. Bu parçaya gittiğimde tarayıcı konsolunda bana bir hata veriyordu. İçine boş bir span elemanı koyarak düzeltemedim. – andrewajo