Prototipin Ajax.Updater aslında IE7 güncellemiyor

6 Cevap php

I Ajax.Updater kullanarak bir formu göndermek ve bu güncelleme benim sayfa bir div elemanı sonucu çalışıyorum.

Her şey IE6, FF3, Chrome ve Opera harika çalışıyor. Ancak, IE7 düzensiz çalışır, ama daha sık değil, sadece bir şey yapmak için görünmüyor.

İşte javascript bulunuyor:

function testcaseHistoryUpdate(testcase, form) {
document.body.style.cursor = 'wait';
var param = Form.serialize(form);
new Ajax.Updater("content", "results/testcaseHistory/" + testcase, {
	onComplete: function(transport) {document.body.style.cursor = 'auto'}, 
	parameters: param,
	method: 'post'
	}
);
}

I alert() param ne bekliyoruz ayarlanır çağrıları kullanılarak teyit ettik.

Ben IE7 agresif önbelleğe birçok yerde okudum ve kök nedeni olabilir, ancak her zaman php yanıt aşağıdaki ekledikten sonra, hala çalışmıyor ettik.

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

Ayrıca ben sadece her çağrı için farklı parametrelere sahip bir rasgele değer ile doldurulur sahte bir parametre ekleyerek denedim bir önbelleğe alma sorunu çözmek için denemek için, ama yardımcı olmadı.

Ben de buldum this, UTF-8 IE7 ile bir sorunu neden gibi görünüyordu, ama benim sayfa açıkça işaretlenmiştir burada:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Herkes Bu tür bir sorunu neden test diğer tarayıcılarda aksine ne IE7 ile yanlış olabilir bir fikriniz var mı?

6 Cevap

Bu yani bir form etiketi içinde olan bir DOM kimliği elemanı üzerinde bir güncelleştirme yapamaz görünür. Herkes bu etrafında bir yol bulmuş? Ben sadece form etiketi açıklama ve DOM öğesi hareket yok ben de form etiketi dışına taşımak, ve benim kod çalışıyor.

Yaygın bir sorun extra comma problem gibi görünüyor. Emin IE size sol alt uyarı simgesi vererek değil emin olun. IE benim javascript ben diledi gibi koşmak olmaz doğrulayarak değildi çünkü ben, geçmişte bu konuda bazı sorunlar vardı.

AJAX konuyla ilgili, ancak blok seviyesinden elemanlar ile bir satır içi eleman güncelleştirmeye çalışırsanız IE bir hata atmak olmaz. Bu aşağıdaki ile sarma kodu sizin için geçerli olmadığını test etmek için:

try {
// Your code
// something.update('...');
} catch(error) {
alert(error.descripton)
alert(error.number)
}

Eğer hata alırsanız blok seviyesinden elemanlar ile blok düzeyi öğeler güncelliyoruz böylece -2146827687 Html'nizi yeniden düzenlemek.

Ben tam olarak aynı sorun var!

After a lot of trial-&-error approach, I found out what's going on:

IE executes the Ajax call, processes the PHP file, but does NOT display anything on screen!

Nothing "echo"ed, or "print"ed in the PHP file gets displayed on the div (target='hidden-div), nor the onComplete "alert" gets displayed on the screen!

BUT, all MySQL calls are working, I added some code to add and/or delete some foobar records on my database and they all worked!

Bu IE önbelleğe alma sorunu olabilir?

Kesinlikle benim için bir önbelleğe alma sorunu gibi kokuyor. Sen IE7 (ve IE6) önbellek çok agresif, özellikle AJAX çağrıları, ve sık sık yanlış önbellek kontrol başlıkları görmezden doğru.

Her zamanki düzeltme, bir "önbellek engelleme" rastgele parametresini to the URL (ekstra bir POST değişkeni olarak) eklemektir.

Bu önbelleğe alma geldiğinde IE aptalca. Ben Yani benim normal bir anti-önbelleğe şeyler koymak olamazdı tüm html / beden vb yoktu küçük bir 'yardımcı' sayfası vardı.

Bir URL var fikri olsa çalışıyor.

    var cacheBuster = parseInt(Math.random() * 99999999); // cache buster
    new Ajax.Updater(elementId, '/Helpers/PendingChanges.aspx?Cache=' + cacheBuster);

Ben charset ilgili satırı eklendi kadar Ayrıca, IE8 içinde bir 'belirtilmemiş hatası' başlamıştı.