2009-04-14 5 views
2

Ajax.Updaterを使用してフォームを送信しようとしましたが、その結果、ページのdiv要素が更新されました。プロトタイプのAjax.Updaterが実際にIE7で更新されない

IE6、FF3、Chrome、Operaではすべて機能します。しかし、IE7では散発的に動作しますが、しばしば何もしないように見えます。ここで

はjavascriptのだ:

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' 
    } 
); 
} 

私はPARAMは私が期待するものに設定されているalert()呼び出しを使用して確認しました。

私はIE7キャッシュを積極的に読んでおり、それが根本的な原因かもしれませんが、すべて私のPHPレスポンスに以下を追加してもそれはまだ機能しません。

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"); 

さらに私はちょうどすべての呼び出しのために異なるパラメータを持つようにランダムな値で満たされます偽のパラメータを追加しようとしたが、それは助けにはならなかったのキャッシングの問題を解決しようとします。

私もUTF-8は、IE7で問題を引き起こしているように見えたが、私のページが明確にマークされてthis、見つけた:

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

誰もがIE7などと間違っている可能性がどのような任意のアイデアを持っていますがこの種の問題を引き起こすためにテストした他のブラウザとは反対ですか?

答えて

2

フォームタグ内にあるDOM id要素を更新することはできません。誰かがこれを回避する方法を見つけましたか?私のコードは、フォームタグの外に移動するとうまく動作し、フォームタグをコメントアウトしてDOM要素を移動しないときにもうまく動作します。

+0

urソリューションは私に面倒をかなり保存しました。ありがとう! – umar

1

一般的な問題はextra comma problemのようです。 IEが左下の警告アイコンを表示していないことを確認してください。私は過去にこれといくつかの問題を抱えていました。なぜなら、IEはjavascriptを検証していないので、私が望むように動かないからです。

+0

私も読んだことがあり、私のコードには最後の引数の後にコンマが付きません。私は実際に何かを変更したかどうかを確認するためにカンマを追加しようとしました... –

0

私はまったく同じ問題を抱えています!

はtrial- & -errorアプローチの多くの後、私は は何が起こっているかが分かった:IEのAjax呼び出しを実行

、PHPファイルを処理しますが、画面上にない 表示は何もありません!

div(target = 'hidden-div)には何も表示されません。また、onCompleteの "alert"は の画面に表示されません。

しかし、すべてのMySQLコールが機能しています。追加するコードを追加しました。 私のデータベースでいくつかのfoobarレコードを削除しました。

これはIEのキャッシュ問題ですか?

0

キャッシングの問題のような気がします。あなたは、IE7(とIE6)が非常に積極的にキャッシュし、特にAJAX呼び出しをキャッシュし、キャッシュ制御ヘッダーを誤って無視することが間違っています。

通常の修正では、URLに(追加のPOST変数としてではなく)の "cachebuster"ランダムパラメータを追加します。

1

AJAXの問題とは関係ありませんが、インライン要素をブロックレベルの要素で更新しようとするとIEでエラーが発生します。これがあなたに適用されるかどうかをテストするには、以下を使用してコードをラップ:

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

をあなたがブロックレベル要素とブロックレベル要素を更新しているように、あなたのhtmlを再配置エラー-2146827687を取得した場合。

0

IEはキャッシングに関して愚かです。私は全体のHTML /ボディなどを持っていない少しのヘルパーページを持っていたので、私は通常のアンチキャッシングのものを入れられませんでした。

URLの考え方は変わりません。

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

また、私はcharsetについての行を追加するまで、IE8で「不特定のエラー」が発生していました。

関連する問題