2011-07-06 48 views
0

AJAXの特定のビットを実行する際に問題が発生しました。ここで私は起こりたいと思う方法です:Javascript AJAXリクエストの問題

私は、ボタンを押すと少しのJavascript(アクションの実行を確認)を実行し、AJAXリクエストを送信してからフォームを送信するフォームを持っています。私はAJAXリクエストの出力は気にしませんが、フォームが送信される前に実行する必要があります。

ボタンは次のように定義される:関数check_deleteがある

<input title="Delete" onclick="return check_delete('id');" 
type="submit" name="Delete" value="Delete"> 

var sure = confirm('Are you sure you want to delete this?'); 
if (!sure) return false; 

var del = confirm('Would you like to delete related content?'); 
if (window.XMLHttpRequest) { 
    xmlhttp=new XMLHttpRequest(); 
} else { 
    xmlhttp=new ActiveXObject('Microsoft.XMLHTTP'); 
} 
var url = '/del_check.php&id='+id+'&del='+del; 

xmlhttp.open('GET',url,true); 
xmlhttp.send(); 
return true; 

機能がxmlhttp.send()一部を除いて、正常に動作 - 要求はWEB-に表示されません。サーバーのログに記録され、実行されません。それに少しだけ遊んだ後、私はfalseの代わりにtrueを返すように関数の最後の行を変更すると、私のAJAXは動作しますが、false戻り値のため、フォームは送信されません。

私には何が欠けていますか?

+0

xmlhttp.send(null) –

+0

xmlhttp.send(null)またはxmlhttp.send() - 違いはありません。 – SaltyNuts

+1

var url = '/del_check.php?id =' + id + '&del =' + del; – stealthyninja

答えて

1

このライン:

xmlhttp.open('GET',url,true); 

あなたは非同期要求(MSDNW3C)を発行していることを意味します。要求はあなたのコードによって開始されますが、あなたのコードはそれが完了するのを待つことをブロックしません(普通は良いことですtm)。

ただし、フォームを送信すると、そのページは切り捨てられ、フォームの送信結果に置き換えられます。未処理またはキューに入れられたajaxリクエストは中止されるか、開始されることはありません。

あなたfalseにそのtrueを変更することで、要求の同期(ブロッキング)を作ることもできますが、その要求が完了するまで、あなたは、ページ(せいぜい)またはブラウザを(最悪で)ロックよ、そのISN理想ではない。

代替は完全にAJAX要求を行うことを避けるために、またはフォームの送信をキャンセルし、(あなたがそれを気にしないにもかかわらず)Ajaxの応答を待つ、その後、プログラムでフォームを送信する(例えばHTMLFormElement#submit   —を経由しています、formのDOM要素でsubmitと呼んでください)。その2番目の操作を行う場合は、手動で挿入しない限り、クリックしたボタンはフォームデータに含まれません。これは、そのボタンによってフォームが送信されなくなるためです。