この同じ問題が他のところで議論されていますが、 :
$(#form)内に$ .postを使用しています.AJAX経由でフォームを送信すると、ユーザーはページを離れません。これはIEでうまく動作しますが、FFとChromeの両方で、クエリー文字列のフォームフィールド名と値を持つ現在のページがリフレッシュされます。これは、フォームにaction = ""が指定されていないためです。で指定された関数の名前を変更すると、IEが$ .postを正しく実行する関数を見つけられず、フォームフィールドの名前と値で現在のページも更新されるため、IEに問題を複製させることができますクエーストリング。
フォームは動的に作成され、一度に複数のフォームを表示できるように、フォーム名に乱数を入れる必要があります。私はそれが問題の一部だとは思わないが、フォーム名は常にすべてのブラウザのalert()に正しく表示されるためです。
function add_new_product(){
var formName = "frm_add_new_product_" + window.random_number_for_IDs;
alert('this alert is BEFORE the (#formname).submit');
$("#" + formName).submit(function(event) {
alert('this alert is inside the (#formname).submit BEFORE .preventDefault');
event.preventDefault();
alert('this alert is inside the (#formname).submit AFTER .preventDefault but BEFORE $.post');
$.post("add_new_product.php?SiteID=<?php echo $_GET['SiteID']; ?>", $("#" + formName).serialize(), function(data){$("#DIV_new_product_name_" + window.random_number_for_IDs).html(data);});
alert('this alert is inside the (#formname).submit AFTER $.post');
});
alert('this alert is AFTER the (#formname).submit');
$("#DIV_new_product_form_" + window.random_number_for_IDs).fadeOut(100, function(){$("#DIV_new_product_name_" + window.random_number_for_IDs).fadeIn(100);});
}
IEでは、すべての警告()は上記の順序ではなく表示されます。 $(#form).submitの前と後のものを最初に表示し、次にその中のものを表示します。 FFとChromeは$(#form).submitの前後にアラート()だけを表示しますが、内部にはアラートは表示されません。固定
「<?php echo $ _GET ['SiteID'];」とは何ですか? ?> 'クライアントに表示されますか?それはあなたが期待するものですか?また、スクリプトは 'function(data){}'の中のコードを待つだけなので、最後の "AFTER"アラートは常にそれらの前に表示されます。データがクライアントに返された後に実行する必要があるものは、その 'function(data){}'の中に入っている必要があります – Niklas
Chromeの優れた組み込みのイントロスペクションツール、特にJavaScriptデバッガを試しましたか? Ctrl + Shift + iを押しながらスクリプトをクリックし、ドロップダウンからスクリプトを取得し、デバッグする行番号をクリックします。 – cheeken
Niklas:Firebugは、PHPのSiteIDが正しく表示されることを示しています。謎は、なぜ、サブミットが全く機能していないように見えるかということです。その場合は、指定したDIVにadd_new_product.phpのターゲットページのエラーが表示されるようにしてください。 –